From 839d650465d6e4b94cf73c21220ae06f92412ad8 Mon Sep 17 00:00:00 2001 From: Saranya Jena Date: Fri, 15 Nov 2024 23:26:59 +0530 Subject: [PATCH 01/14] added installation manifest for 3.13.0 (#4945) Signed-off-by: Saranya-jena --- .../docs/3.10.0/litmus-getting-started.yaml | 2 +- mkdocs/docs/3.10.0/litmus-installation.yaml | 2 +- .../docs/3.10.0/litmus-without-resources.yaml | 2 +- .../docs/3.11.0/litmus-getting-started.yaml | 2 +- mkdocs/docs/3.11.0/litmus-installation.yaml | 2 +- .../docs/3.11.0/litmus-without-resources.yaml | 2 +- .../docs/3.12.0/litmus-getting-started.yaml | 2 +- mkdocs/docs/3.12.0/litmus-installation.yaml | 2 +- .../docs/3.12.0/litmus-without-resources.yaml | 2 +- .../docs/3.13.0/litmus-getting-started.yaml | 414 ++ mkdocs/docs/3.13.0/litmus-installation.yaml | 447 ++ mkdocs/docs/3.13.0/litmus-portal-crds.yml | 3596 +++++++++++++++++ .../docs/3.13.0/litmus-without-resources.yaml | 420 ++ mkdocs/docs/3.9.0/litmus-getting-started.yaml | 2 +- mkdocs/docs/3.9.0/litmus-installation.yaml | 2 +- .../docs/3.9.0/litmus-without-resources.yaml | 2 +- mkdocs/docs/3.9.1/litmus-getting-started.yaml | 2 +- mkdocs/docs/3.9.1/litmus-installation.yaml | 2 +- .../docs/3.9.1/litmus-without-resources.yaml | 2 +- mkdocs/docs/3.9.2/litmus-getting-started.yaml | 2 +- mkdocs/docs/3.9.2/litmus-installation.yaml | 2 +- .../docs/3.9.2/litmus-without-resources.yaml | 2 +- 22 files changed, 4895 insertions(+), 18 deletions(-) create mode 100644 mkdocs/docs/3.13.0/litmus-getting-started.yaml create mode 100644 mkdocs/docs/3.13.0/litmus-installation.yaml create mode 100644 mkdocs/docs/3.13.0/litmus-portal-crds.yml create mode 100644 mkdocs/docs/3.13.0/litmus-without-resources.yaml diff --git a/mkdocs/docs/3.10.0/litmus-getting-started.yaml b/mkdocs/docs/3.10.0/litmus-getting-started.yaml index bda3281748e..d5f014510b4 100644 --- a/mkdocs/docs/3.10.0/litmus-getting-started.yaml +++ b/mkdocs/docs/3.10.0/litmus-getting-started.yaml @@ -231,7 +231,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.10.x" + value: "v3.10.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.10.0/litmus-installation.yaml b/mkdocs/docs/3.10.0/litmus-installation.yaml index 656da6e5522..15b3ce818bc 100644 --- a/mkdocs/docs/3.10.0/litmus-installation.yaml +++ b/mkdocs/docs/3.10.0/litmus-installation.yaml @@ -257,7 +257,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.10.x" + value: "v3.10.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.10.0/litmus-without-resources.yaml b/mkdocs/docs/3.10.0/litmus-without-resources.yaml index 751c6389bc4..ea14a66369a 100644 --- a/mkdocs/docs/3.10.0/litmus-without-resources.yaml +++ b/mkdocs/docs/3.10.0/litmus-without-resources.yaml @@ -248,7 +248,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.10.x" + value: "v3.10.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.11.0/litmus-getting-started.yaml b/mkdocs/docs/3.11.0/litmus-getting-started.yaml index 98cf7c399c4..8b84302a783 100644 --- a/mkdocs/docs/3.11.0/litmus-getting-started.yaml +++ b/mkdocs/docs/3.11.0/litmus-getting-started.yaml @@ -231,7 +231,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.11.x" + value: "v3.11.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.11.0/litmus-installation.yaml b/mkdocs/docs/3.11.0/litmus-installation.yaml index 2709edcceb3..a0a7fffc3a8 100644 --- a/mkdocs/docs/3.11.0/litmus-installation.yaml +++ b/mkdocs/docs/3.11.0/litmus-installation.yaml @@ -257,7 +257,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.11.x" + value: "v3.11.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.11.0/litmus-without-resources.yaml b/mkdocs/docs/3.11.0/litmus-without-resources.yaml index bea17a91758..b9ae85182e3 100644 --- a/mkdocs/docs/3.11.0/litmus-without-resources.yaml +++ b/mkdocs/docs/3.11.0/litmus-without-resources.yaml @@ -248,7 +248,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.11.x" + value: "v3.11.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.12.0/litmus-getting-started.yaml b/mkdocs/docs/3.12.0/litmus-getting-started.yaml index 7a41babc625..4c0f1605630 100644 --- a/mkdocs/docs/3.12.0/litmus-getting-started.yaml +++ b/mkdocs/docs/3.12.0/litmus-getting-started.yaml @@ -231,7 +231,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.12.x" + value: "v3.12.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.12.0/litmus-installation.yaml b/mkdocs/docs/3.12.0/litmus-installation.yaml index c6fde54947e..ba143759420 100644 --- a/mkdocs/docs/3.12.0/litmus-installation.yaml +++ b/mkdocs/docs/3.12.0/litmus-installation.yaml @@ -257,7 +257,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.12.x" + value: "v3.12.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.12.0/litmus-without-resources.yaml b/mkdocs/docs/3.12.0/litmus-without-resources.yaml index 79d57fe4450..c431e6770a3 100644 --- a/mkdocs/docs/3.12.0/litmus-without-resources.yaml +++ b/mkdocs/docs/3.12.0/litmus-without-resources.yaml @@ -248,7 +248,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.12.x" + value: "v3.12.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.13.0/litmus-getting-started.yaml b/mkdocs/docs/3.13.0/litmus-getting-started.yaml new file mode 100644 index 00000000000..f36713967b1 --- /dev/null +++ b/mkdocs/docs/3.13.0/litmus-getting-started.yaml @@ -0,0 +1,414 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: litmus-portal-admin-secret +stringData: + DB_USER: "root" + DB_PASSWORD: "1234" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: litmus-portal-admin-config +data: + DB_SERVER: mongodb://my-release-mongodb-0.my-release-mongodb-headless:27017,my-release-mongodb-1.my-release-mongodb-headless:27017,my-release-mongodb-2.my-release-mongodb-headless:27017/admin + VERSION: "3.13.0" + SKIP_SSL_VERIFY: "false" + # Configurations if you are using dex for OAuth + DEX_ENABLED: "false" + OIDC_ISSUER: "http://:32000" + DEX_OAUTH_CALLBACK_URL: "http://:8080/auth/dex/callback" + DEX_OAUTH_CLIENT_ID: "LitmusPortalAuthBackend" + DEX_OAUTH_CLIENT_SECRET: "ZXhhbXBsZS1hcHAtc2VjcmV0" + OAuthJwtSecret: "litmus-oauth@123" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: litmusportal-frontend-nginx-configuration +data: + nginx.conf: | + pid /tmp/nginx.pid; + + events { + worker_connections 1024; + } + + http { + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + client_body_temp_path /tmp/client_temp; + proxy_temp_path /tmp/proxy_temp_path; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + server_tokens off; + + include /etc/nginx/mime.types; + + gzip on; + gzip_disable "msie6"; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + server { + listen 8185 default_server; + root /opt/chaos; + + location /health { + return 200; + } + + location / { + proxy_http_version 1.1; + add_header Cache-Control "no-cache"; + try_files $uri /index.html; + autoindex on; + } + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location /auth/ { + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass "http://litmusportal-auth-server-service:9003/"; + } + + location /api/ { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass "http://litmusportal-server-service:9002/"; + } + } + } +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-frontend + labels: + component: litmusportal-frontend +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-frontend + template: + metadata: + labels: + component: litmusportal-frontend + spec: + automountServiceAccountToken: false + containers: + - name: litmusportal-frontend + image: litmuschaos/litmusportal-frontend:3.13.0 + # securityContext: + # runAsUser: 2000 + # allowPrivilegeEscalation: false + # runAsNonRoot: true + imagePullPolicy: Always + ports: + - containerPort: 8185 + resources: + requests: + memory: "250Mi" + cpu: "125m" + ephemeral-storage: "500Mi" + limits: + memory: "512Mi" + cpu: "550m" + ephemeral-storage: "1Gi" + volumeMounts: + - name: nginx-config + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + volumes: + - name: nginx-config + configMap: + name: litmusportal-frontend-nginx-configuration +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-frontend-service +spec: + type: NodePort + ports: + - name: http + port: 9091 + targetPort: 8185 + selector: + component: litmusportal-frontend +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-server + labels: + component: litmusportal-server +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-server + template: + metadata: + labels: + component: litmusportal-server + spec: + automountServiceAccountToken: false + volumes: + - name: gitops-storage + emptyDir: {} + - name: hub-storage + emptyDir: {} + containers: + - name: graphql-server + image: litmuschaos/litmusportal-server:3.13.0 + volumeMounts: + - mountPath: /tmp/ + name: gitops-storage + - mountPath: /tmp/version + name: hub-storage + securityContext: + runAsUser: 2000 + allowPrivilegeEscalation: false + runAsNonRoot: true + readOnlyRootFilesystem: true + envFrom: + - configMapRef: + name: litmus-portal-admin-config + - secretRef: + name: litmus-portal-admin-secret + env: + # if self-signed certificate are used pass the base64 tls certificate, to allow agents to use tls for communication + - name: TLS_CERT_B64 + value: "" + - name: ENABLE_GQL_INTROSPECTION + value: "false" + - name: INFRA_DEPLOYMENTS + value: '["app=chaos-exporter", "name=chaos-operator", "app=workflow-controller", "app=event-tracker"]' + - name: CHAOS_CENTER_UI_ENDPOINT + value: "" + - name: SUBSCRIBER_IMAGE + value: "litmuschaos/litmusportal-subscriber:3.13.0" + - name: EVENT_TRACKER_IMAGE + value: "litmuschaos/litmusportal-event-tracker:3.13.0" + - name: ARGO_WORKFLOW_CONTROLLER_IMAGE + value: "litmuschaos/workflow-controller:v3.3.1" + - name: ARGO_WORKFLOW_EXECUTOR_IMAGE + value: "litmuschaos/argoexec:v3.3.1" + - name: LITMUS_CHAOS_OPERATOR_IMAGE + value: "litmuschaos/chaos-operator:3.13.0" + - name: LITMUS_CHAOS_RUNNER_IMAGE + value: "litmuschaos/chaos-runner:3.13.0" + - name: LITMUS_CHAOS_EXPORTER_IMAGE + value: "litmuschaos/chaos-exporter:3.13.0" + - name: CONTAINER_RUNTIME_EXECUTOR + value: "k8sapi" + - name: DEFAULT_HUB_BRANCH_NAME + value: "v3.13.x" + - name: LITMUS_AUTH_GRPC_ENDPOINT + value: "litmusportal-auth-server-service" + - name: LITMUS_AUTH_GRPC_PORT + value: "3030" + - name: WORKFLOW_HELPER_IMAGE_VERSION + value: "3.13.0" + - name: REMOTE_HUB_MAX_SIZE + value: "5000000" + - name: INFRA_COMPATIBLE_VERSIONS + value: '["3.13.0"]' + - name: ALLOWED_ORIGINS + value: ".*" #eg: ^(http://|https://|)litmuschaos.io(:[0-9]+|)?,^(http://|https://|)litmusportal-server-service(:[0-9]+|)? + - name: ENABLE_INTERNAL_TLS + value: "false" + - name: TLS_CERT_PATH + value: "" + - name: TLS_KEY_PATH + value: "" + - name: CA_CERT_TLS_PATH + value: "" + - name: REST_PORT + value: "8080" + - name: GRPC_PORT + value: "8000" + ports: + - containerPort: 8080 + - containerPort: 8000 + imagePullPolicy: Always + resources: + requests: + memory: "250Mi" + cpu: "225m" + ephemeral-storage: "500Mi" + limits: + memory: "712Mi" + cpu: "550m" + ephemeral-storage: "1Gi" +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: litmusportal-server + namespace: litmus + labels: + component: litmusportal-server +spec: + policyTypes: + - Ingress + podSelector: + matchLabels: + component: litmusportal-server + ingress: + - from: + - podSelector: + matchLabels: + component: litmusportal-frontend +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-server-service +spec: + type: NodePort + ports: + - name: graphql-server + port: 9002 + targetPort: 8080 + - name: graphql-rpc-server + port: 8000 + targetPort: 8000 + selector: + component: litmusportal-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-auth-server + labels: + component: litmusportal-auth-server +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-auth-server + template: + metadata: + labels: + component: litmusportal-auth-server + spec: + automountServiceAccountToken: false + containers: + - name: auth-server + image: litmuschaos/litmusportal-auth-server:3.13.0 + securityContext: + runAsUser: 2000 + allowPrivilegeEscalation: false + runAsNonRoot: true + readOnlyRootFilesystem: true + envFrom: + - configMapRef: + name: litmus-portal-admin-config + - secretRef: + name: litmus-portal-admin-secret + env: + - name: STRICT_PASSWORD_POLICY + value: "false" + - name: ADMIN_USERNAME + value: "admin" + - name: ADMIN_PASSWORD + value: "litmus" + - name: LITMUS_GQL_GRPC_ENDPOINT + value: "litmusportal-server-service" + - name: LITMUS_GQL_GRPC_PORT + value: "8000" + - name: ALLOWED_ORIGINS + value: ".*" #eg: ^(http://|https://|)litmuschaos.io(:[0-9]+|)?,^(http://|https://|)litmusportal-server-service(:[0-9]+|)? + - name: ENABLE_INTERNAL_TLS + value: "false" + - name: TLS_CERT_PATH + value: "" + - name: TLS_KEY_PATH + value: "" + - name: CA_CERT_TLS_PATH + value: "" + - name: REST_PORT + value: "3000" + - name: GRPC_PORT + value: "3030" + ports: + - containerPort: 3000 + - containerPort: 3030 + imagePullPolicy: Always + resources: + requests: + memory: "250Mi" + cpu: "125m" + ephemeral-storage: "500Mi" + limits: + memory: "712Mi" + cpu: "550m" + ephemeral-storage: "1Gi" +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: litmusportal-auth-server + namespace: litmus + labels: + component: litmusportal-auth-server +spec: + policyTypes: + - Ingress + podSelector: + matchLabels: + component: litmusportal-auth-server + ingress: + - from: + - podSelector: + matchLabels: + component: litmusportal-frontend + - from: + - podSelector: + matchLabels: + component: litmusportal-server +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-auth-server-service +spec: + type: NodePort + ports: + - name: auth-server + port: 9003 + targetPort: 3000 + - name: auth-rpc-server + port: 3030 + targetPort: 3030 + selector: + component: litmusportal-auth-server \ No newline at end of file diff --git a/mkdocs/docs/3.13.0/litmus-installation.yaml b/mkdocs/docs/3.13.0/litmus-installation.yaml new file mode 100644 index 00000000000..eaa13d99dfc --- /dev/null +++ b/mkdocs/docs/3.13.0/litmus-installation.yaml @@ -0,0 +1,447 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: litmus-portal-admin-secret +stringData: + DB_USER: "root" + DB_PASSWORD: "1234" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: litmus-portal-admin-config +data: + DB_SERVER: mongodb://my-release-mongodb-0.my-release-mongodb-headless:27017,my-release-mongodb-1.my-release-mongodb-headless:27017,my-release-mongodb-2.my-release-mongodb-headless:27017/admin + VERSION: "3.13.0" + SKIP_SSL_VERIFY: "false" + # Configurations if you are using dex for OAuth + DEX_ENABLED: "false" + OIDC_ISSUER: "http://:32000" + DEX_OAUTH_CALLBACK_URL: "http://:8080/auth/dex/callback" + DEX_OAUTH_CLIENT_ID: "LitmusPortalAuthBackend" + DEX_OAUTH_CLIENT_SECRET: "ZXhhbXBsZS1hcHAtc2VjcmV0" + OAuthJwtSecret: "litmus-oauth@123" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: litmusportal-frontend-nginx-configuration +data: + nginx.conf: | + pid /tmp/nginx.pid; + + events { + worker_connections 1024; + } + + http { + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + client_body_temp_path /tmp/client_temp; + proxy_temp_path /tmp/proxy_temp_path; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + server_tokens off; + + include /etc/nginx/mime.types; + + gzip on; + gzip_disable "msie6"; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + server { + listen 8185 ssl; + ssl_certificate /etc/tls/tls.crt; + ssl_certificate_key /etc/tls/tls.key; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_client_certificate /etc/tls/ca.crt; + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + + root /opt/chaos; + + location /health { + return 200; + } + + location / { + proxy_http_version 1.1; + add_header Cache-Control "no-cache"; + try_files $uri /index.html; + autoindex on; + } + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location /auth/ { + proxy_ssl_verify off; + proxy_ssl_session_reuse on; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass "https://litmusportal-auth-server-service:9005/"; + proxy_ssl_certificate /etc/tls/tls.crt; + proxy_ssl_certificate_key /etc/tls/tls.key; + } + + location /api/ { + proxy_ssl_verify off; + proxy_ssl_session_reuse on; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass "https://litmusportal-server-service:9004/"; + proxy_ssl_certificate /etc/tls/tls.crt; + proxy_ssl_certificate_key /etc/tls/tls.key; + } + } + } +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-frontend + labels: + component: litmusportal-frontend +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-frontend + template: + metadata: + labels: + component: litmusportal-frontend + spec: + automountServiceAccountToken: false + containers: + - name: litmusportal-frontend + image: litmuschaos/litmusportal-frontend:3.13.0 + # securityContext: + # runAsUser: 2000 + # allowPrivilegeEscalation: false + # runAsNonRoot: true + imagePullPolicy: Always + ports: + - containerPort: 8185 + resources: + requests: + memory: "250Mi" + cpu: "125m" + ephemeral-storage: "500Mi" + limits: + memory: "512Mi" + cpu: "550m" + ephemeral-storage: "1Gi" + volumeMounts: + - name: nginx-config + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + - mountPath: /etc/tls + name: tls-secret + volumes: + - name: nginx-config + configMap: + name: litmusportal-frontend-nginx-configuration + - name: tls-secret + secret: + secretName: tls-secret +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-frontend-service +spec: + type: NodePort + ports: + - name: http + port: 9091 + targetPort: 8185 + selector: + component: litmusportal-frontend +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-server + labels: + component: litmusportal-server +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-server + template: + metadata: + labels: + component: litmusportal-server + spec: + automountServiceAccountToken: false + volumes: + - name: gitops-storage + emptyDir: {} + - name: hub-storage + emptyDir: {} + - name: tls-secret + secret: + secretName: tls-secret + containers: + - name: graphql-server + image: litmuschaos/litmusportal-server:3.13.0 + volumeMounts: + - mountPath: /tmp/ + name: gitops-storage + - mountPath: /tmp/version + name: hub-storage + - mountPath: /etc/tls + name: tls-secret + securityContext: + runAsUser: 2000 + allowPrivilegeEscalation: false + runAsNonRoot: true + readOnlyRootFilesystem: true + envFrom: + - configMapRef: + name: litmus-portal-admin-config + - secretRef: + name: litmus-portal-admin-secret + env: + # if self-signed certificate are used pass the base64 tls certificate, to allow agents to use tls for communication + - name: TLS_CERT_B64 + value: "" + - name: ENABLE_GQL_INTROSPECTION + value: "false" + - name: INFRA_DEPLOYMENTS + value: '["app=chaos-exporter", "name=chaos-operator", "app=workflow-controller", "app=event-tracker"]' + - name: CHAOS_CENTER_UI_ENDPOINT + value: "" + - name: SUBSCRIBER_IMAGE + value: "litmuschaos/litmusportal-subscriber:3.13.0" + - name: EVENT_TRACKER_IMAGE + value: "litmuschaos/litmusportal-event-tracker:3.13.0" + - name: ARGO_WORKFLOW_CONTROLLER_IMAGE + value: "litmuschaos/workflow-controller:v3.3.1" + - name: ARGO_WORKFLOW_EXECUTOR_IMAGE + value: "litmuschaos/argoexec:v3.3.1" + - name: LITMUS_CHAOS_OPERATOR_IMAGE + value: "litmuschaos/chaos-operator:3.13.0" + - name: LITMUS_CHAOS_RUNNER_IMAGE + value: "litmuschaos/chaos-runner:3.13.0" + - name: LITMUS_CHAOS_EXPORTER_IMAGE + value: "litmuschaos/chaos-exporter:3.13.0" + - name: CONTAINER_RUNTIME_EXECUTOR + value: "k8sapi" + - name: DEFAULT_HUB_BRANCH_NAME + value: "v3.13.x" + - name: LITMUS_AUTH_GRPC_ENDPOINT + value: "litmusportal-auth-server-service" + - name: LITMUS_AUTH_GRPC_PORT + value: "3030" + - name: WORKFLOW_HELPER_IMAGE_VERSION + value: "3.13.0" + - name: REMOTE_HUB_MAX_SIZE + value: "5000000" + - name: INFRA_COMPATIBLE_VERSIONS + value: '["3.13.0"]' + - name: ALLOWED_ORIGINS + value: "^(http://|https://|)litmuschaos.io(:[0-9]+|)?,^(http://|https://|)litmusportal-server-service(:[0-9]+|)?" + - name: ENABLE_INTERNAL_TLS + value: "true" + - name: TLS_CERT_PATH + value: "/etc/tls/tls.crt" + - name: TLS_KEY_PATH + value: "/etc/tls/tls.key" + - name: CA_CERT_TLS_PATH + value: "/etc/tls/ca.crt" + - name: REST_PORT + value: "8081" + - name: GRPC_PORT + value: "8001" + ports: + - containerPort: 8081 + - containerPort: 8001 + imagePullPolicy: Always + resources: + requests: + memory: "250Mi" + cpu: "225m" + ephemeral-storage: "500Mi" + limits: + memory: "712Mi" + cpu: "550m" + ephemeral-storage: "1Gi" +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: litmusportal-server + namespace: litmus + labels: + component: litmusportal-server +spec: + policyTypes: + - Ingress + podSelector: + matchLabels: + component: litmusportal-server + ingress: + - from: + - podSelector: + matchLabels: + component: litmusportal-frontend +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-server-service +spec: + type: NodePort + ports: + - name: graphql-server-https + port: 9004 + targetPort: 8081 + - name: graphql-rpc-server-https + port: 8001 + targetPort: 8001 + selector: + component: litmusportal-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-auth-server + labels: + component: litmusportal-auth-server +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-auth-server + template: + metadata: + labels: + component: litmusportal-auth-server + spec: + volumes: + - name: tls-secret + secret: + secretName: tls-secret + automountServiceAccountToken: false + containers: + - name: auth-server + volumeMounts: + - mountPath: /etc/tls + name: tls-secret + image: litmuschaos/litmusportal-auth-server:3.13.0 + securityContext: + runAsUser: 2000 + allowPrivilegeEscalation: false + runAsNonRoot: true + readOnlyRootFilesystem: true + envFrom: + - configMapRef: + name: litmus-portal-admin-config + - secretRef: + name: litmus-portal-admin-secret + env: + - name: STRICT_PASSWORD_POLICY + value: "false" + - name: ADMIN_USERNAME + value: "admin" + - name: ADMIN_PASSWORD + value: "litmus" + - name: LITMUS_GQL_GRPC_ENDPOINT + value: "litmusportal-server-service" + - name: LITMUS_GQL_GRPC_PORT + value: "8000" + - name: ALLOWED_ORIGINS + value: "^(http://|https://|)litmuschaos.io(:[0-9]+|)?,^(http://|https://|)litmusportal-server-service(:[0-9]+|)?" #ip needs to added here + - name: ENABLE_INTERNAL_TLS + value: "true" + - name: TLS_CERT_PATH + value: "/etc/tls/tls.crt" + - name: TLS_KEY_PATH + value: "/etc/tls/ctls.key" + - name: CA_CERT_TLS_PATH + value: "/etc/tls/ca.crt" + - name: REST_PORT + value: "3001" + - name: GRPC_PORT + value: "3031" + ports: + - containerPort: 3001 + - containerPort: 3031 + imagePullPolicy: Always + resources: + requests: + memory: "250Mi" + cpu: "125m" + ephemeral-storage: "500Mi" + limits: + memory: "712Mi" + cpu: "550m" + ephemeral-storage: "1Gi" +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: litmusportal-auth-server + namespace: litmus + labels: + component: litmusportal-auth-server +spec: + policyTypes: + - Ingress + podSelector: + matchLabels: + component: litmusportal-auth-server + ingress: + - from: + - podSelector: + matchLabels: + component: litmusportal-frontend + - from: + - podSelector: + matchLabels: + component: litmusportal-server +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-auth-server-service +spec: + type: NodePort + ports: + - name: auth-server-https + port: 9005 + targetPort: 3001 + - name: auth-rpc-server-https + port: 3031 + targetPort: 3031 + selector: + component: litmusportal-auth-server diff --git a/mkdocs/docs/3.13.0/litmus-portal-crds.yml b/mkdocs/docs/3.13.0/litmus-portal-crds.yml new file mode 100644 index 00000000000..0dba567b892 --- /dev/null +++ b/mkdocs/docs/3.13.0/litmus-portal-crds.yml @@ -0,0 +1,3596 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: clusterworkflowtemplates.argoproj.io +spec: + group: argoproj.io + names: + kind: ClusterWorkflowTemplate + listKind: ClusterWorkflowTemplateList + plural: clusterworkflowtemplates + shortNames: + - clusterwftmpl + - cwft + singular: clusterworkflowtemplate + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: cronworkflows.argoproj.io +spec: + group: argoproj.io + names: + kind: CronWorkflow + listKind: CronWorkflowList + plural: cronworkflows + shortNames: + - cwf + - cronwf + singular: cronworkflow + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workflows.argoproj.io +spec: + group: argoproj.io + names: + kind: Workflow + listKind: WorkflowList + plural: workflows + shortNames: + - wf + singular: workflow + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workflowtasksets.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowTaskSet + listKind: WorkflowTaskSetList + plural: workflowtasksets + shortNames: + - wfts + singular: workflowtaskset + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workflowtemplates.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowTemplate + listKind: WorkflowTemplateList + plural: workflowtemplates + shortNames: + - wftmpl + singular: workflowtemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: workflowtaskresults.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowTaskResult + listKind: WorkflowTaskResultList + plural: workflowtaskresults + singular: workflowtaskresult + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + message: + type: string + metadata: + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + encryptionOptions: + properties: + enableEncryption: + type: boolean + kmsEncryptionContext: + type: string + kmsKeyId: + type: string + serverSideCustomerKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + description: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + phase: + type: string + progress: + type: string + required: + - metadata + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosengines.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosEngine + listKind: ChaosEngineList + plural: chaosengines + singular: chaosengine + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + jobCleanUpPolicy: + type: string + pattern: ^(delete|retain)$ + # alternate ways to do this in case of complex pattern matches + #oneOf: + # - pattern: '^delete$' + # - pattern: '^retain$' + defaultHealthCheck: + type: boolean + appinfo: + type: object + properties: + appkind: + type: string + pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$ + applabel: + type: string + appns: + type: string + selectors: + type: object + properties: + pods: + items: + properties: + names: + type: string + namespace: + type: string + required: + - names + - namespace + type: object + type: array + workloads: + items: + properties: + kind: + type: string + pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$ + labels: + type: string + names: + type: string + namespace: + type: string + oneOf: + - required: [ names ] + - required: [ labels ] + required: + - kind + - namespace + type: object + type: array + oneOf: + - required: [ pods ] + - required: [ workloads ] + auxiliaryAppInfo: + type: string + engineState: + type: string + pattern: ^(active|stop)$ + chaosServiceAccount: + type: string + terminationGracePeriodSeconds: + type: integer + components: + type: object + properties: + sidecar: + type: array + items: + type: object + properties: + env: + description: ENV contains ENV passed to the sidecar container + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are + expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, the + reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a double + $$, ie: $$(VAR_NAME). Escaped references will never + be expanded, regardless of whether the variable + exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: EnvFrom for the sidecar container + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + secrets: + items: + properties: + mountPath: + type: string + name: + type: string + required: + - mountPath + - name + type: object + type: array + runner: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + image: + type: string + type: + type: string + pattern: ^(go)$ + runnerAnnotations: + type: object + runnerLabels: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + value: + type: string + minLength: 1 + tolerations: + description: Pod's tolerations. + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + experiments: + type: array + items: + type: object + properties: + name: + type: string + spec: + type: object + properties: + probe: + type: array + items: + type: object + required: + - name + - type + - mode + - runProperties + properties: + name: + type: string + type: + type: string + minLength: 1 + pattern: ^(k8sProbe|httpProbe|cmdProbe|promProbe|sloProbe)$ + k8sProbe/inputs: + type: object + required: + - version + - resource + - operation + properties: + group: + type: string + version: + type: string + resource: + type: string + namespace: + type: string + resourceNames: + type: string + fieldSelector: + type: string + labelSelector: + type: string + operation: + type: string + pattern: ^(present|absent|create|delete)$ + minLength: 1 + cmdProbe/inputs: + type: object + required: + - command + - comparator + properties: + command: + type: string + minLength: 1 + comparator: + type: object + required: + - type + - criteria + - value + properties: + type: + type: string + minLength: 1 + pattern: ^(int|float|string)$ + criteria: + type: string + value: + type: string + source: + description: The external pod where we have to run the + probe commands. It will run the commands inside the experiment pod itself(inline mode) if source contains a nil value + required: + - image + properties: + annotations: + additionalProperties: + type: string + description: Annotations for the source pod + type: object + args: + description: Args for the source pod + items: + type: string + type: array + command: + description: Command for the source pod + items: + type: string + type: array + env: + description: ENVList contains ENV passed to + the source pod + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. The $(VAR_NAME) syntax can + be escaped with a double $$, ie: $$(VAR_NAME). + Escaped references will never be expanded, + regardless of whether the variable exists + or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if + value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be + defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in + terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field + to select in the specified API + version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: + required for volumes, optional + for env vars' + type: string + divisor: + description: Specifies the output + format of the exposed resources, + defaults to "1" + type: string + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + hostNetwork: + description: HostNetwork define the hostNetwork + of the external pod it supports boolean values + and default value is false + type: boolean + inheritInputs: + description: InheritInputs define to inherit experiment + details in probe pod it supports boolean values + and default value is false. + type: boolean + image: + description: Image for the source pod + type: string + imagePullPolicy: + description: ImagePullPolicy for the source pod + type: string + imagePullSecrets: + description: ImagePullSecrets for source pod + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent' + type: string + type: object + type: array + labels: + additionalProperties: + type: string + description: Labels for the source pod + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector for the source pod + type: object + privileged: + description: Privileged for the source pod + type: boolean + volumeMount: + description: VolumesMount for the source pod + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container + at which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name + of a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mounted. Defaults to "" (volume's + root). + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + should be mounted. Behaves similarly + to SubPath but environment variable + references $(VAR_NAME) are expanded + using the container's environment. Defaults + to "" (volume's root). SubPathExpr and + SubPath are mutually exclusive. This + field is beta in 1.15. + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + description: Volumes for the source pod + items: + description: Volume represents a named volume + in a pod that may be accessed by any container + in the pod. + properties: + awsElasticBlockStore: + description: 'AWSElasticBlockStore represents + an AWS Disk resource that is attached + to a kubelet''s host machine and then + exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + partition: + description: 'The partition in the + volume that you want to mount. If + omitted, the default is to mount + by volume name. Examples: For volume + /dev/sda1, you specify the partition + as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'Specify "true" to force + and set the ReadOnly property in + VolumeMounts to "true". If omitted, + the default is "false". More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'Unique ID of the persistent + disk resource in AWS (Amazon EBS + volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: AzureDisk represents an Azure + Data Disk mount on the host and bind + mount to the pod. + properties: + cachingMode: + description: 'Host Caching mode: None, + Read Only, Read Write.' + type: string + diskName: + description: The Name of the data + disk in the blob storage + type: string + diskURI: + description: The URI the data disk + in the blob storage + type: string + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + kind: + description: 'Expected values Shared: + multiple blob disks per storage + account Dedicated: single blob + disk per storage account Managed: + azure managed data disk (only in + managed availability set). defaults + to shared' + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: AzureFile represents an Azure + File Service mount on the host and bind + mount to the pod. + properties: + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretName: + description: the name of secret that + contains Azure Storage Account Name + and Key + type: string + shareName: + description: Share Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: CephFS represents a Ceph + FS mount on the host that shares a pod's + lifetime + properties: + monitors: + description: 'Required: Monitors is + a collection of Ceph monitors More + info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'Optional: Used as the + mounted root, rather than the full + Ceph tree, default is /' + type: string + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'Optional: SecretFile + is the path to key ring for User, + default is /etc/ceph/user.secret + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'Optional: SecretRef + is reference to the authentication + secret for User, default is empty. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + user: + description: 'Optional: User is the + rados user name, default is admin + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'Cinder represents a cinder + volume attached and mounted on kubelets + host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'Optional: points to + a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + volumeID: + description: 'volume id used to identify + the volume in cinder. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: If unspecified, each + key-value pair in the Data field + of the referenced ConfigMap will + be projected into the volume as + a file whose name is the key and + content is the value. If specified, + the listed keys will be projected + into the specified paths, and unlisted + keys will not be present. If a key + is specified which is not present + in the ConfigMap, the volume setup + will error unless it is marked optional. + Paths must be relative and may not + contain the '..' path or start with + '..'. + items: + description: Maps a string key to + a path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: The relative path + of the file to map the key + to. May not be an absolute + path. May not contain the + path element '..'. May not + start with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + csi: + description: CSI (Container Storage Interface) + represents storage that is handled by + an external CSI driver (Alpha feature). + properties: + driver: + description: Driver is the name of + the CSI driver that handles this + volume. Consult with your admin + for the correct name as registered + in the cluster. + type: string + fsType: + description: Filesystem type to mount. + Ex. "ext4", "xfs", "ntfs". If not + provided, the empty value is passed + to the associated CSI driver which + will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: NodePublishSecretRef + is a reference to the secret object + containing sensitive information + to pass to the CSI driver to complete + the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. + If the secret object contains more + than one secret, all secret references + are passed. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + readOnly: + description: Specifies a read-only + configuration for the volume. Defaults + to false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: VolumeAttributes stores + driver-specific properties that + are passed to the CSI driver. Consult + your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: DownwardAPI represents downward + API about the pod that should populate + this volume + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: Items is a list of downward + API volume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only annotations, + labels, name and namespace + are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms of, + defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or contain + the ''..'' path. Must be utf-8 + encoded. The first item of + the relative path must not + start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are currently + supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + description: Specifies the + output format of the exposed + resources, defaults to + "1" + type: string + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'EmptyDir represents a temporary + directory that shares a pod''s lifetime. + More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'What type of storage + medium should back this directory. + The default is "" which means to + use the node''s default medium. + Must be an empty string (default) + or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + description: 'Total amount of local + storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage + on memory medium EmptyDir would + be the minimum value between the + SizeLimit specified here and the + sum of memory limits of all containers + in a pod. The default is nil which + means that the limit is undefined. + More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + type: string + type: object + fc: + description: FC represents a Fibre Channel + resource that is attached to a kubelet's + host machine and then exposed to the + pod. + properties: + fsType: + description: 'Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + lun: + description: 'Optional: FC target + lun number' + format: int32 + type: integer + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts.' + type: boolean + targetWWNs: + description: 'Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'Optional: FC volume + world wide identifiers (wwids) Either + wwids or combination of targetWWNs + and lun must be set, but not both + simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: FlexVolume represents a generic + volume resource that is provisioned/attached + using an exec based plugin. + properties: + driver: + description: Driver is the name of + the driver to use for this volume. + type: string + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". The default + filesystem depends on FlexVolume + script. + type: string + options: + additionalProperties: + type: string + description: 'Optional: Extra command + options if any.' + type: object + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts.' + type: boolean + secretRef: + description: 'Optional: SecretRef + is reference to the secret object + containing sensitive information + to pass to the plugin scripts. This + may be empty if no secret object + is specified. If the secret object + contains more than one secret, all + secrets are passed to the plugin + scripts.' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + required: + - driver + type: object + flocker: + description: Flocker represents a Flocker + volume attached to a kubelet's host + machine. This depends on the Flocker + control service being running + properties: + datasetName: + description: Name of the dataset stored + as metadata -> name on the dataset + for Flocker should be considered + as deprecated + type: string + datasetUUID: + description: UUID of the dataset. + This is unique identifier of a Flocker + dataset + type: string + type: object + gcePersistentDisk: + description: 'GCEPersistentDisk represents + a GCE Disk resource that is attached + to a kubelet''s host machine and then + exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + partition: + description: 'The partition in the + volume that you want to mount. If + omitted, the default is to mount + by volume name. Examples: For volume + /dev/sda1, you specify the partition + as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can + leave the property empty). More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'Unique name of the PD + resource in GCE. Used to identify + the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'GitRepo represents a git + repository at a particular revision. + DEPRECATED: GitRepo is deprecated. To + provision a container with a git repo, + mount an EmptyDir into an InitContainer + that clones the repo using git, then + mount the EmptyDir into the Pod''s container.' + properties: + directory: + description: Target directory name. + Must not contain or start with '..'. If + '.' is supplied, the volume directory + will be the git repository. Otherwise, + if specified, the volume will contain + the git repository in the subdirectory + with the given name. + type: string + repository: + description: Repository URL + type: string + revision: + description: Commit hash for the specified + revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'Glusterfs represents a Glusterfs + mount on the host that shares a pod''s + lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'EndpointsName is the + endpoint name that details Glusterfs + topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'Path is the Glusterfs + volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'ReadOnly here will force + the Glusterfs volume to be mounted + with read-only permissions. Defaults + to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'HostPath represents a pre-existing + file or directory on the host machine + that is directly exposed to the container. + This is generally used for system agents + or other privileged things that are + allowed to see the host machine. Most + containers will NOT need this. More + info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + ### TODO(jonesdl) We need to restrict + who can use host directory mounts and + who can/can not mount host directories + as read/write.' + properties: + path: + description: 'Path of the directory + on the host. If the path is a symlink, + it will follow the link to the real + path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'Type for HostPath Volume + Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'ISCSI represents an ISCSI + Disk resource that is attached to a + kubelet''s host machine and then exposed + to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: whether support iSCSI + Discovery CHAP authentication + type: boolean + chapAuthSession: + description: whether support iSCSI + Session CHAP authentication + type: boolean + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + initiatorName: + description: Custom iSCSI Initiator + Name. If initiatorName is specified + with iscsiInterface simultaneously, + new iSCSI interface : will be created for the connection. + type: string + iqn: + description: Target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iSCSI Interface Name + that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: iSCSI Target Lun number. + format: int32 + type: integer + portals: + description: iSCSI Target Portal List. + The portal is either an IP or ip_addr:port + if the port is other than default + (typically TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. + type: boolean + secretRef: + description: CHAP Secret for iSCSI + target and initiator authentication + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + targetPortal: + description: iSCSI Target Portal. + The Portal is either an IP or ip_addr:port + if the port is other than default + (typically TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'Volume''s name. Must be + a DNS_LABEL and unique within the pod. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'NFS represents an NFS mount + on the host that shares a pod''s lifetime + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'Path that is exported + by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'ReadOnly here will force + the NFS export to be mounted with + read-only permissions. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'Server is the hostname + or IP address of the NFS server. + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'PersistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'ClaimName is the name + of a PersistentVolumeClaim in the + same namespace as the pod using + this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: Will force the ReadOnly + setting in VolumeMounts. Default + false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: PhotonPersistentDisk represents + a PhotonController persistent disk attached + and mounted on kubelets host machine + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + pdID: + description: ID that identifies Photon + Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: PortworxVolume represents + a portworx volume attached and mounted + on kubelets host machine + properties: + fsType: + description: FSType represents the + filesystem type to mount Must be + a filesystem type supported by the + host operating system. Ex. "ext4", + "xfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + volumeID: + description: VolumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: Items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: Mode bits to use on created + files by default. Must be a value + between 0 and 0777. Directories + within the path are not affected + by this setting. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set. + format: int32 + type: integer + sources: + description: list of volume projections + items: + description: Projection that may + be projected along with other + supported volume types + properties: + configMap: + description: information about + the configMap data to project + properties: + items: + description: If unspecified, + each key-value pair in + the Data field of the + referenced ConfigMap will + be projected into the + volume as a file whose + name is the key and content + is the value. If specified, + the listed keys will be + projected into the specified + paths, and unlisted keys + will not be present. If + a key is specified which + is not present in the + ConfigMap, the volume + setup will error unless + it is marked optional. + Paths must be relative + and may not contain the + '..' path or start with + '..'. + items: + description: Maps a string + key to a path within + a volume. + properties: + key: + description: The key + to project. + type: string + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: The relative + path of the file + to map the key to. + May not be an absolute + path. May not contain + the path element + '..'. May not start + with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the + referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful + fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether + the ConfigMap or its keys + must be defined + type: boolean + type: object + downwardAPI: + description: information about + the downwardAPI data to project + properties: + items: + description: Items is a + list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile + represents information + to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: + Selects a field + of the pod: only + annotations, labels, + name and namespace + are supported.' + properties: + apiVersion: + description: Version + of the schema + the FieldPath + is written in + terms of, defaults + to "v1". + type: string + fieldPath: + description: Path + of the field + to select in + the specified + API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: 'Required: + Path is the relative + path name of the + file to be created. + Must not be absolute + or contain the ''..'' + path. Must be utf-8 + encoded. The first + item of the relative + path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects + a resource of the + container: only + resources limits + and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container + name: required + for volumes, + optional for + env vars' + type: string + divisor: + description: Specifies + the output format + of the exposed + resources, defaults + to "1" + type: string + resource: + description: 'Required: + resource to + select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + description: information about + the secret data to project + properties: + items: + description: If unspecified, + each key-value pair in + the Data field of the + referenced Secret will + be projected into the + volume as a file whose + name is the key and content + is the value. If specified, + the listed keys will be + projected into the specified + paths, and unlisted keys + will not be present. If + a key is specified which + is not present in the + Secret, the volume setup + will error unless it is + marked optional. Paths + must be relative and may + not contain the '..' path + or start with '..'. + items: + description: Maps a string + key to a path within + a volume. + properties: + key: + description: The key + to project. + type: string + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: The relative + path of the file + to map the key to. + May not be an absolute + path. May not contain + the path element + '..'. May not start + with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the + referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful + fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether + the Secret or its key + must be defined + type: boolean + type: object + serviceAccountToken: + description: information about + the serviceAccountToken data + to project + properties: + audience: + description: Audience is + the intended audience + of the token. A recipient + of a token must identify + itself with an identifier + specified in the audience + of the token, and otherwise + should reject the token. + The audience defaults + to the identifier of the + apiserver. + type: string + expirationSeconds: + description: ExpirationSeconds + is the requested duration + of validity of the service + account token. As the + token approaches expiration, + the kubelet volume plugin + will proactively rotate + the service account token. + The kubelet will start + trying to rotate the token + if the token is older + than 80 percent of its + time to live or if the + token is older than 24 + hours.Defaults to 1 hour + and must be at least 10 + minutes. + format: int64 + type: integer + path: + description: Path is the + path relative to the mount + point of the file to project + the token into. + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + description: Quobyte represents a Quobyte + mount on the host that shares a pod's + lifetime + properties: + group: + description: Group to map volume access + to Default is no group + type: string + readOnly: + description: ReadOnly here will force + the Quobyte volume to be mounted + with read-only permissions. Defaults + to false. + type: boolean + registry: + description: Registry represents a + single or multiple Quobyte Registry + services specified as a string as + host:port pair (multiple entries + are separated with commas) which + acts as the central registry for + volumes + type: string + tenant: + description: Tenant owning the given + Quobyte volume in the Backend Used + with dynamically provisioned Quobyte + volumes, value is set by the plugin + type: string + user: + description: User to map volume access + to Defaults to serivceaccount user + type: string + volume: + description: Volume is a string that + references an already created Quobyte + volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'RBD represents a Rados Block + Device mount on the host that shares + a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + image: + description: 'The rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'Keyring is the path + to key ring for RBDUser. Default + is /etc/ceph/keyring. More info: + https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'A collection of Ceph + monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'The rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'SecretRef is name of + the authentication secret for RBDUser. + If provided overrides keyring. Default + is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + user: + description: 'The rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: ScaleIO represents a ScaleIO + persistent volume attached and mounted + on Kubernetes nodes. + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Default is + "xfs". + type: string + gateway: + description: The host address of the + ScaleIO API Gateway. + type: string + protectionDomain: + description: The name of the ScaleIO + Protection Domain for the configured + storage. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef references + to the secret for ScaleIO user and + other sensitive information. If + this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + sslEnabled: + description: Flag to enable/disable + SSL communication with Gateway, + default false + type: boolean + storageMode: + description: Indicates whether the + storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: The ScaleIO Storage Pool + associated with the protection domain. + type: string + system: + description: The name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: The name of a volume + already created in the ScaleIO system + that is associated with this volume + source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'Secret represents a secret + that should populate this volume. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: If unspecified, each + key-value pair in the Data field + of the referenced Secret will be + projected into the volume as a file + whose name is the key and content + is the value. If specified, the + listed keys will be projected into + the specified paths, and unlisted + keys will not be present. If a key + is specified which is not present + in the Secret, the volume setup + will error unless it is marked optional. + Paths must be relative and may not + contain the '..' path or start with + '..'. + items: + description: Maps a string key to + a path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: The relative path + of the file to map the key + to. May not be an absolute + path. May not contain the + path element '..'. May not + start with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: 'Name of the secret in + the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: StorageOS represents a StorageOS + volume attached and mounted on Kubernetes + nodes. + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef specifies the + secret to use for obtaining the + StorageOS API credentials. If not + specified, default values will be + attempted. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + volumeName: + description: VolumeName is the human-readable + name of the StorageOS volume. Volume + names are only unique within a namespace. + type: string + volumeNamespace: + description: VolumeNamespace specifies + the scope of the volume within StorageOS. If + no namespace is specified then the + Pod's namespace will be used. This + allows the Kubernetes name scoping + to be mirrored within StorageOS + for tighter integration. Set VolumeName + to any name to override the default + behaviour. Set to "default" if you + are not using namespaces within + StorageOS. Namespaces that do not + pre-exist within StorageOS will + be created. + type: string + type: object + vsphereVolume: + description: VsphereVolume represents + a vSphere volume attached and mounted + on kubelets host machine + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + storagePolicyID: + description: Storage Policy Based + Management (SPBM) profile ID associated + with the StoragePolicyName. + type: string + storagePolicyName: + description: Storage Policy Based + Management (SPBM) profile name. + type: string + volumePath: + description: Path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + httpProbe/inputs: + type: object + required: + - url + - method + properties: + url: + type: string + minLength: 1 + insecureSkipVerify: + type: boolean + method: + type: object + minProperties: 1 + properties: + get: + type: object + required: + - criteria + - responseCode + properties: + criteria: + type: string + minLength: 1 + responseCode: + type: string + minLength: 1 + post: + type: object + required: + - criteria + - responseCode + properties: + contentType: + type: string + minLength: 1 + body: + type: string + bodyPath: + type: string + criteria: + type: string + minLength: 1 + responseCode: + type: string + minLength: 1 + promProbe/inputs: + type: object + required: + - endpoint + - comparator + properties: + endpoint: + type: string + query: + type: string + queryPath: + type: string + comparator: + type: object + required: + - criteria + - value + properties: + criteria: + type: string + value: + type: string + runProperties: + type: object + minProperties: 2 + required: + - probeTimeout + - interval + properties: + evaluationTimeout: + type: string + probeTimeout: + type: string + interval: + type: string + retry: + type: integer + attempt: + type: integer + probePollingInterval: + type: string + initialDelaySeconds: + type: integer + initialDelay: + type: string + stopOnFailure: + type: boolean + sloProbe/inputs: + description: inputs needed for the SLO probe + required: + - platformEndpoint + - sloIdentifier + - sloSourceMetadata + - comparator + properties: + comparator: + description: Comparator check for the correctness + of the probe output + required: + - criteria + - value + properties: + criteria: + description: Criteria for matching data it + supports >=, <=, ==, >, <, != for int and + float it supports equal, notEqual, contains + for string + type: string + type: + description: Type of data it can be int, float, + string + type: string + value: + description: Value contains relative value + for criteria + type: string + type: object + evaluationWindow: + description: EvaluationWindow is the time period + for which the metrics will be evaluated + properties: + evaluationEndTime: + description: End time of evaluation + type: integer + evaluationStartTime: + description: Start time of evaluation + type: integer + type: object + platformEndpoint: + description: PlatformEndpoint for the monitoring + service endpoint + type: string + insecureSkipVerify: + description: InsecureSkipVerify flag to skip certificate + checks + type: boolean + sloIdentifier: + description: SLOIdentifier for fetching the details + of the SLO + type: string + sloSourceMetadata: + description: SLOSourceMetadata consists of required + metadata details to fetch metric data + required: + - apiTokenSecret + - scope + properties: + apiTokenSecret: + description: APITokenSecret for authenticating + with the platform service + type: string + scope: + description: Scope required for fetching details + required: + - accountIdentifier + - orgIdentifier + - projectIdentifier + properties: + accountIdentifier: + description: AccountIdentifier for account + ID + type: string + orgIdentifier: + description: OrgIdentifier for organization + ID + type: string + projectIdentifier: + description: ProjectIdentifier for project + ID + type: string + type: object + type: object + type: object + mode: + type: string + pattern: ^(SOT|EOT|Edge|Continuous|OnChaos)$ + minLength: 1 + data: + type: string + components: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + statusCheckTimeouts: + type: object + properties: + delay: + type: integer + timeout: + type: integer + nodeSelector: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + allowEmptyValue: false + value: + type: string + minLength: 1 + allowEmptyValue: false + experimentImage: + type: string + env: + type: array + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a + double $$, ie: $$(VAR_NAME). Escaped references + will never be expanded, regardless of whether + the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: + supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, spec.nodeName, + spec.serviceAccountName, status.hostIP, + status.podIP.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, defaults + to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + configMaps: + type: array + items: + type: object + properties: + name: + type: string + mountPath: + type: string + secrets: + type: array + items: + type: object + properties: + name: + type: string + mountPath: + type: string + experimentAnnotations: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + allowEmptyValue: false + value: + type: string + minLength: 1 + allowEmptyValue: false + tolerations: + description: Pod's tolerations. + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + + status: + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: {} + conversion: + strategy: None +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosexperiments.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosExperiment + listKind: ChaosExperimentList + plural: chaosexperiments + singular: chaosexperiment + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + description: + type: object + additionalProperties: + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + status: + x-kubernetes-preserve-unknown-fields: true + type: object + spec: + type: object + properties: + definition: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + args: + type: array + items: + type: string + command: + type: array + items: + type: string + env: + type: array + items: + type: object + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a + double $$, ie: $$(VAR_NAME). Escaped references + will never be expanded, regardless of whether + the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: + supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, spec.nodeName, + spec.serviceAccountName, status.hostIP, + status.podIP.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, defaults + to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + image: + type: string + imagePullPolicy: + type: string + labels: + type: object + additionalProperties: + type: string + scope: + type: string + pattern: ^(Namespaced|Cluster)$ + permissions: + type: array + items: + type: object + minProperties: 3 + required: + - apiGroups + - resources + - verbs + properties: + apiGroups: + type: array + items: + type: string + resources: + type: array + items: + type: string + verbs: + type: array + items: + type: string + resourceNames: + type: array + items: + type: string + nonResourceURLs: + type: array + items: + type: string + configMaps: + type: array + items: + type: object + minProperties: 2 + properties: + name: + type: string + allowEmptyValue: false + minLength: 1 + mountPath: + type: string + allowEmptyValue: false + minLength: 1 + secrets: + type: array + items: + type: object + minProperties: 2 + properties: + name: + type: string + allowEmptyValue: false + minLength: 1 + mountPath: + type: string + allowEmptyValue: false + minLength: 1 + hostFileVolumes: + type: array + items: + type: object + minProperties: 3 + properties: + name: + type: string + allowEmptyValue: false + minLength: 1 + mountPath: + type: string + allowEmptyValue: false + minLength: 1 + nodePath: + type: string + allowEmptyValue: false + minLength: 1 + securityContext: + x-kubernetes-preserve-unknown-fields: true + type: object + hostPID: + type: boolean + + served: true + storage: true + subresources: {} + conversion: + strategy: None +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosresults.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosResult + listKind: ChaosResultList + plural: chaosresults + singular: chaosresult + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + x-kubernetes-preserve-unknown-fields: true + type: object + status: + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: {} + conversion: + strategy: None +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.7.0 + creationTimestamp: null + name: eventtrackerpolicies.eventtracker.litmuschaos.io +spec: + group: eventtracker.litmuschaos.io + names: + kind: EventTrackerPolicy + listKind: EventTrackerPolicyList + plural: eventtrackerpolicies + singular: eventtrackerpolicy + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: EventTrackerPolicy is the Schema for the eventtrackerpolicies + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: EventTrackerPolicySpec defines the desired state of EventTrackerPolicy + properties: + condition_type: + type: string + conditions: + items: + properties: + key: + type: string + operator: + type: string + value: + type: string + type: object + type: array + type: object + statuses: + items: + description: EventTrackerPolicyStatus defines the observed state of + EventTrackerPolicy + properties: + is_triggered: + type: string + resource: + type: string + resource_name: + type: string + result: + type: string + time_stamp: + description: 'INSERT ADDITIONAL STATUS FIELD - define observed state + of cluster Important: Run "make" to regenerate code after modifying + this file' + type: string + workflow_id: + type: string + type: object + type: array + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] \ No newline at end of file diff --git a/mkdocs/docs/3.13.0/litmus-without-resources.yaml b/mkdocs/docs/3.13.0/litmus-without-resources.yaml new file mode 100644 index 00000000000..1ae160ee6cb --- /dev/null +++ b/mkdocs/docs/3.13.0/litmus-without-resources.yaml @@ -0,0 +1,420 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: litmus-portal-admin-secret +stringData: + DB_USER: "root" + DB_PASSWORD: "1234" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: litmus-portal-admin-config +data: + DB_SERVER: mongodb://my-release-mongodb-0.my-release-mongodb-headless:27017,my-release-mongodb-1.my-release-mongodb-headless:27017,my-release-mongodb-2.my-release-mongodb-headless:27017/admin + VERSION: "3.13.0" + SKIP_SSL_VERIFY: "false" + # Configurations if you are using dex for OAuth + DEX_ENABLED: "false" + OIDC_ISSUER: "http://:32000" + DEX_OAUTH_CALLBACK_URL: "http://:8080/auth/dex/callback" + DEX_OAUTH_CLIENT_ID: "LitmusPortalAuthBackend" + DEX_OAUTH_CLIENT_SECRET: "ZXhhbXBsZS1hcHAtc2VjcmV0" + OAuthJwtSecret: "litmus-oauth@123" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: litmusportal-frontend-nginx-configuration +data: + nginx.conf: | + pid /tmp/nginx.pid; + + events { + worker_connections 1024; + } + + http { + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + client_body_temp_path /tmp/client_temp; + proxy_temp_path /tmp/proxy_temp_path; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + server_tokens off; + + include /etc/nginx/mime.types; + + gzip on; + gzip_disable "msie6"; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + server { + listen 8185 ssl; + ssl_certificate /etc/tls/tls.crt; + ssl_certificate_key /etc/tls/tls.key; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_client_certificate /etc/tls/ca.crt; + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + + root /opt/chaos; + + location /health { + return 200; + } + + location / { + proxy_http_version 1.1; + add_header Cache-Control "no-cache"; + try_files $uri /index.html; + autoindex on; + } + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location /auth/ { + proxy_ssl_verify off; + proxy_ssl_session_reuse on; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass "https://litmusportal-auth-server-service:9005/"; + proxy_ssl_certificate /etc/tls/tls.crt; + proxy_ssl_certificate_key /etc/tls/tls.key; + } + + location /api/ { + proxy_ssl_verify off; + proxy_ssl_session_reuse on; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass "https://litmusportal-server-service:9004/"; + proxy_ssl_certificate /etc/tls/tls.crt; + proxy_ssl_certificate_key /etc/tls/tls.key; + } + } + } +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-frontend + labels: + component: litmusportal-frontend +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-frontend + template: + metadata: + labels: + component: litmusportal-frontend + spec: + automountServiceAccountToken: false + containers: + - name: litmusportal-frontend + image: litmuschaos/litmusportal-frontend:3.13.0 + # securityContext: + # runAsUser: 2000 + # allowPrivilegeEscalation: false + # runAsNonRoot: true + imagePullPolicy: Always + ports: + - containerPort: 8185 + volumeMounts: + - name: nginx-config + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + - mountPath: /etc/tls + name: tls-secret + volumes: + - name: nginx-config + configMap: + name: litmusportal-frontend-nginx-configuration + - name: tls-secret + secret: + secretName: tls-secret +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-frontend-service +spec: + type: NodePort + ports: + - name: http + port: 9091 + targetPort: 8185 + selector: + component: litmusportal-frontend +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-server + labels: + component: litmusportal-server +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-server + template: + metadata: + labels: + component: litmusportal-server + spec: + automountServiceAccountToken: false + volumes: + - name: gitops-storage + emptyDir: {} + - name: hub-storage + emptyDir: {} + - name: tls-secret + secret: + secretName: tls-secret + containers: + - name: graphql-server + image: litmuschaos/litmusportal-server:3.13.0 + volumeMounts: + - mountPath: /tmp/ + name: gitops-storage + - mountPath: /tmp/version + name: hub-storage + - mountPath: /etc/tls + name: tls-secret + securityContext: + runAsUser: 2000 + allowPrivilegeEscalation: false + runAsNonRoot: true + readOnlyRootFilesystem: true + envFrom: + - configMapRef: + name: litmus-portal-admin-config + - secretRef: + name: litmus-portal-admin-secret + env: + # if self-signed certificate are used pass the base64 tls certificate, to allow agents to use tls for communication + - name: TLS_CERT_B64 + value: "" + - name: ENABLE_GQL_INTROSPECTION + value: "false" + - name: INFRA_DEPLOYMENTS + value: '["app=chaos-exporter", "name=chaos-operator", "app=workflow-controller", "app=event-tracker"]' + - name: CHAOS_CENTER_UI_ENDPOINT + value: "" + - name: SUBSCRIBER_IMAGE + value: "litmuschaos/litmusportal-subscriber:3.13.0" + - name: EVENT_TRACKER_IMAGE + value: "litmuschaos/litmusportal-event-tracker:3.13.0" + - name: ARGO_WORKFLOW_CONTROLLER_IMAGE + value: "litmuschaos/workflow-controller:v3.3.1" + - name: ARGO_WORKFLOW_EXECUTOR_IMAGE + value: "litmuschaos/argoexec:v3.3.1" + - name: LITMUS_CHAOS_OPERATOR_IMAGE + value: "litmuschaos/chaos-operator:3.13.0" + - name: LITMUS_CHAOS_RUNNER_IMAGE + value: "litmuschaos/chaos-runner:3.13.0" + - name: LITMUS_CHAOS_EXPORTER_IMAGE + value: "litmuschaos/chaos-exporter:3.13.0" + - name: CONTAINER_RUNTIME_EXECUTOR + value: "k8sapi" + - name: DEFAULT_HUB_BRANCH_NAME + value: "v3.13.x" + - name: LITMUS_AUTH_GRPC_ENDPOINT + value: "litmusportal-auth-server-service" + - name: LITMUS_AUTH_GRPC_PORT + value: "3030" + - name: WORKFLOW_HELPER_IMAGE_VERSION + value: "3.13.0" + - name: REMOTE_HUB_MAX_SIZE + value: "5000000" + - name: INFRA_COMPATIBLE_VERSIONS + value: '["3.13.0"]' + - name: ALLOWED_ORIGINS + value: ".*" #eg: ^(http://|https://|)litmuschaos.io(:[0-9]+|)?,^(http://|https://|)litmusportal-server-service(:[0-9]+|)? + - name: ENABLE_INTERNAL_TLS + value: "true" + - name: TLS_CERT_PATH + value: "/etc/tls/tls.crt" + - name: TLS_KEY_PATH + value: "/etc/tls/tls.key" + - name: CA_CERT_TLS_PATH + value: "/etc/tls/ca.crt" + - name: REST_PORT + value: "8081" + - name: GRPC_PORT + value: "8001" + ports: + - containerPort: 8081 + - containerPort: 8001 + imagePullPolicy: Always +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: litmusportal-server + namespace: litmus + labels: + component: litmusportal-server +spec: + policyTypes: + - Ingress + podSelector: + matchLabels: + component: litmusportal-server + ingress: + - from: + - podSelector: + matchLabels: + component: litmusportal-frontend +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-server-service +spec: + type: NodePort + ports: + - name: graphql-server-https + port: 9004 + targetPort: 8081 + - name: graphql-rpc-server-https + port: 8001 + targetPort: 8001 + selector: + component: litmusportal-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: litmusportal-auth-server + labels: + component: litmusportal-auth-server +spec: + replicas: 1 + selector: + matchLabels: + component: litmusportal-auth-server + template: + metadata: + labels: + component: litmusportal-auth-server + spec: + volumes: + - name: tls-secret + secret: + secretName: tls-secret + automountServiceAccountToken: false + containers: + - name: auth-server + volumeMounts: + - mountPath: /etc/tls + name: tls-secret + image: litmuschaos/litmusportal-auth-server:3.13.0 + securityContext: + runAsUser: 2000 + allowPrivilegeEscalation: false + runAsNonRoot: true + readOnlyRootFilesystem: true + envFrom: + - configMapRef: + name: litmus-portal-admin-config + - secretRef: + name: litmus-portal-admin-secret + env: + - name: STRICT_PASSWORD_POLICY + value: "false" + - name: ADMIN_USERNAME + value: "admin" + - name: ADMIN_PASSWORD + value: "litmus" + - name: LITMUS_GQL_GRPC_ENDPOINT + value: "litmusportal-server-service" + - name: LITMUS_GQL_GRPC_PORT + value: "8000" + - name: ALLOWED_ORIGINS + value: "^(http://|https://|)litmuschaos.io(:[0-9]+|)?,^(http://|https://|)litmusportal-server-service(:[0-9]+|)?" #ip needs to added here + - name: ENABLE_INTERNAL_TLS + value: "true" + - name: TLS_CERT_PATH + value: "/etc/tls/tls.crt" + - name: TLS_KEY_PATH + value: "/etc/tls/ctls.key" + - name: CA_CERT_TLS_PATH + value: "/etc/tls/ca.crt" + - name: REST_PORT + value: "3001" + - name: GRPC_PORT + value: "3031" + ports: + - containerPort: 3001 + - containerPort: 3031 + imagePullPolicy: Always +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: litmusportal-auth-server + namespace: litmus + labels: + component: litmusportal-auth-server +spec: + policyTypes: + - Ingress + podSelector: + matchLabels: + component: litmusportal-auth-server + ingress: + - from: + - podSelector: + matchLabels: + component: litmusportal-frontend + - from: + - podSelector: + matchLabels: + component: litmusportal-server +--- +apiVersion: v1 +kind: Service +metadata: + name: litmusportal-auth-server-service +spec: + type: NodePort + ports: + - name: auth-server-https + port: 9005 + targetPort: 3001 + - name: auth-rpc-server-https + port: 3031 + targetPort: 3031 + selector: + component: litmusportal-auth-server diff --git a/mkdocs/docs/3.9.0/litmus-getting-started.yaml b/mkdocs/docs/3.9.0/litmus-getting-started.yaml index 099acf93961..e467ad712c2 100644 --- a/mkdocs/docs/3.9.0/litmus-getting-started.yaml +++ b/mkdocs/docs/3.9.0/litmus-getting-started.yaml @@ -231,7 +231,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.0/litmus-installation.yaml b/mkdocs/docs/3.9.0/litmus-installation.yaml index 6dd10ac35d5..ab9e7ef6614 100644 --- a/mkdocs/docs/3.9.0/litmus-installation.yaml +++ b/mkdocs/docs/3.9.0/litmus-installation.yaml @@ -257,7 +257,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.0/litmus-without-resources.yaml b/mkdocs/docs/3.9.0/litmus-without-resources.yaml index b1581da847c..df5067ed11b 100644 --- a/mkdocs/docs/3.9.0/litmus-without-resources.yaml +++ b/mkdocs/docs/3.9.0/litmus-without-resources.yaml @@ -248,7 +248,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.1/litmus-getting-started.yaml b/mkdocs/docs/3.9.1/litmus-getting-started.yaml index d0b7704506c..efc96cf0fea 100644 --- a/mkdocs/docs/3.9.1/litmus-getting-started.yaml +++ b/mkdocs/docs/3.9.1/litmus-getting-started.yaml @@ -231,7 +231,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.1/litmus-installation.yaml b/mkdocs/docs/3.9.1/litmus-installation.yaml index 73c7d92a6d5..879706960be 100644 --- a/mkdocs/docs/3.9.1/litmus-installation.yaml +++ b/mkdocs/docs/3.9.1/litmus-installation.yaml @@ -257,7 +257,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.1/litmus-without-resources.yaml b/mkdocs/docs/3.9.1/litmus-without-resources.yaml index f0ca32fd87d..ba19f0b8e01 100644 --- a/mkdocs/docs/3.9.1/litmus-without-resources.yaml +++ b/mkdocs/docs/3.9.1/litmus-without-resources.yaml @@ -248,7 +248,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.2/litmus-getting-started.yaml b/mkdocs/docs/3.9.2/litmus-getting-started.yaml index c77c6fca81b..e1f8faeb8f7 100644 --- a/mkdocs/docs/3.9.2/litmus-getting-started.yaml +++ b/mkdocs/docs/3.9.2/litmus-getting-started.yaml @@ -231,7 +231,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.2/litmus-installation.yaml b/mkdocs/docs/3.9.2/litmus-installation.yaml index d31c3df25df..2374ccf36ff 100644 --- a/mkdocs/docs/3.9.2/litmus-installation.yaml +++ b/mkdocs/docs/3.9.2/litmus-installation.yaml @@ -257,7 +257,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT diff --git a/mkdocs/docs/3.9.2/litmus-without-resources.yaml b/mkdocs/docs/3.9.2/litmus-without-resources.yaml index f1d65a74c91..2f359ddc1bd 100644 --- a/mkdocs/docs/3.9.2/litmus-without-resources.yaml +++ b/mkdocs/docs/3.9.2/litmus-without-resources.yaml @@ -248,7 +248,7 @@ spec: - name: CONTAINER_RUNTIME_EXECUTOR value: "k8sapi" - name: DEFAULT_HUB_BRANCH_NAME - value: "3.9.x" + value: "v3.9.x" - name: LITMUS_AUTH_GRPC_ENDPOINT value: "litmusportal-auth-server-service" - name: LITMUS_AUTH_GRPC_PORT From 1ff9c12c5d7c88c27da445de4845ac5f536b392d Mon Sep 17 00:00:00 2001 From: Shubham Chaudhary Date: Mon, 18 Nov 2024 13:36:35 +0530 Subject: [PATCH 02/14] chore(3.13.0): Add the installation manifest for 3.13.0 version (#4947) Signed-off-by: Shubham Chaudhary --- mkdocs/docs/chaos-scheduler-v3.13.0.yaml | 2750 +++++++++++++++ .../litmus-namespaced-operator.yaml | 14 +- .../litmus-namespaced-scheduler.yaml | 2 +- .../litmus-ns-experiment-rbac.yaml | 6 +- .../litmus-ns-rbac.yaml | 6 +- mkdocs/docs/litmus-operator-v3.13.0.yaml | 3004 +++++++++++++++++ 6 files changed, 5768 insertions(+), 14 deletions(-) create mode 100644 mkdocs/docs/chaos-scheduler-v3.13.0.yaml create mode 100644 mkdocs/docs/litmus-operator-v3.13.0.yaml diff --git a/mkdocs/docs/chaos-scheduler-v3.13.0.yaml b/mkdocs/docs/chaos-scheduler-v3.13.0.yaml new file mode 100644 index 00000000000..8c1f7c5cc84 --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.13.0.yaml @@ -0,0 +1,2750 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: litmus +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: scheduler + namespace: litmus + labels: + name: scheduler +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: scheduler + labels: + name: scheduler +rules: +- apiGroups: [""] + resources: ["pods","events", "configmaps","services"] + verbs: ["create","get","list","delete","update","patch"] +- apiGroups: ["apps"] + resources: ["replicasets","deployments"] + verbs: ["get","list"] +- apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosschedules"] + verbs: ["get","create","update","patch","delete","list","watch","deletecollection"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: scheduler + labels: + name: scheduler +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: scheduler +subjects: +- kind: ServiceAccount + name: scheduler + namespace: litmus +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: chaos-scheduler + namespace: litmus +spec: + replicas: 1 + selector: + matchLabels: + name: chaos-scheduler + template: + metadata: + labels: + name: chaos-scheduler + spec: + serviceAccountName: scheduler + containers: + - name: chaos-scheduler + image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-scheduler:3.13.0 + command: + - chaos-scheduler + imagePullPolicy: Always + env: + - name: WATCH_NAMESPACE + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: "chaos-scheduler" +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosschedules.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosSchedule + listKind: ChaosScheduleList + plural: chaosschedules + singular: chaosschedule + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + engineTemplateSpec: + type: object + properties: + jobCleanUpPolicy: + type: string + pattern: ^(delete|retain)$ + # alternate ways to do this in case of complex pattern matches + #oneOf: + # - pattern: '^delete$' + # - pattern: '^retain$' + defaultHealthCheck: + type: boolean + appinfo: + type: object + properties: + appkind: + type: string + pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$ + applabel: + type: string + appns: + type: string + selectors: + type: object + properties: + pods: + items: + properties: + names: + type: string + namespace: + type: string + required: + - names + - namespace + type: object + type: array + workloads: + items: + properties: + kind: + type: string + pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$ + labels: + type: string + names: + type: string + namespace: + type: string + oneOf: + - required: [ names ] + - required: [ labels ] + required: + - kind + - namespace + type: object + type: array + oneOf: + - required: [ pods ] + - required: [ workloads ] + auxiliaryAppInfo: + type: string + engineState: + type: string + pattern: ^(active|stop)$ + chaosServiceAccount: + type: string + terminationGracePeriodSeconds: + type: integer + components: + type: object + properties: + sidecar: + type: array + items: + type: object + properties: + env: + description: ENV contains ENV passed to the sidecar container + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are + expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, the + reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a double + $$, ie: $$(VAR_NAME). Escaped references will never + be expanded, regardless of whether the variable + exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: EnvFrom for the sidecar container + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + secrets: + items: + properties: + mountPath: + type: string + name: + type: string + required: + - mountPath + - name + type: object + type: array + runner: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + image: + type: string + type: + type: string + pattern: ^(go)$ + runnerAnnotations: + type: object + runnerLabels: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + value: + type: string + minLength: 1 + tolerations: + description: Pod's tolerations. + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + experiments: + type: array + items: + type: object + properties: + name: + type: string + spec: + type: object + properties: + probe: + type: array + items: + type: object + required: + - name + - type + - mode + - runProperties + properties: + name: + type: string + type: + type: string + minLength: 1 + pattern: ^(k8sProbe|httpProbe|cmdProbe|promProbe|sloProbe)$ + k8sProbe/inputs: + type: object + required: + - version + - resource + - operation + properties: + group: + type: string + version: + type: string + resource: + type: string + namespace: + type: string + resourceNames: + type: string + fieldSelector: + type: string + labelSelector: + type: string + operation: + type: string + pattern: ^(present|absent|create|delete)$ + minLength: 1 + cmdProbe/inputs: + type: object + required: + - command + - comparator + properties: + command: + type: string + minLength: 1 + comparator: + type: object + required: + - type + - criteria + - value + properties: + type: + type: string + minLength: 1 + pattern: ^(int|float|string)$ + criteria: + type: string + value: + type: string + source: + description: The external pod where we have to run the + probe commands. It will run the commands inside the experiment pod itself(inline mode) if source contains a nil value + required: + - image + properties: + annotations: + additionalProperties: + type: string + description: Annotations for the source pod + type: object + args: + description: Args for the source pod + items: + type: string + type: array + command: + description: Command for the source pod + items: + type: string + type: array + env: + description: ENVList contains ENV passed to + the source pod + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. The $(VAR_NAME) syntax can + be escaped with a double $$, ie: $$(VAR_NAME). + Escaped references will never be expanded, + regardless of whether the variable exists + or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if + value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be + defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in + terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field + to select in the specified API + version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: + required for volumes, optional + for env vars' + type: string + divisor: + description: Specifies the output + format of the exposed resources, + defaults to "1" + type: string + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + hostNetwork: + description: HostNetwork define the hostNetwork + of the external pod it supports boolean values + and default value is false + type: boolean + inheritInputs: + description: InheritInputs define to inherit experiment + details in probe pod it supports boolean values + and default value is false. + type: boolean + image: + description: Image for the source pod + type: string + imagePullPolicy: + description: ImagePullPolicy for the source pod + type: string + imagePullSecrets: + description: ImagePullSecrets for source pod + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent' + type: string + type: object + type: array + labels: + additionalProperties: + type: string + description: Labels for the source pod + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector for the source pod + type: object + tolerations: + description: Tolerations for the source pod + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + privileged: + description: Privileged for the source pod + type: boolean + volumeMount: + description: VolumesMount for the source pod + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container + at which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name + of a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mounted. Defaults to "" (volume's + root). + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + should be mounted. Behaves similarly + to SubPath but environment variable + references $(VAR_NAME) are expanded + using the container's environment. Defaults + to "" (volume's root). SubPathExpr and + SubPath are mutually exclusive. This + field is beta in 1.15. + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + description: Volumes for the source pod + items: + description: Volume represents a named volume + in a pod that may be accessed by any container + in the pod. + properties: + awsElasticBlockStore: + description: 'AWSElasticBlockStore represents + an AWS Disk resource that is attached + to a kubelet''s host machine and then + exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + partition: + description: 'The partition in the + volume that you want to mount. If + omitted, the default is to mount + by volume name. Examples: For volume + /dev/sda1, you specify the partition + as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'Specify "true" to force + and set the ReadOnly property in + VolumeMounts to "true". If omitted, + the default is "false". More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'Unique ID of the persistent + disk resource in AWS (Amazon EBS + volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: AzureDisk represents an Azure + Data Disk mount on the host and bind + mount to the pod. + properties: + cachingMode: + description: 'Host Caching mode: None, + Read Only, Read Write.' + type: string + diskName: + description: The Name of the data + disk in the blob storage + type: string + diskURI: + description: The URI the data disk + in the blob storage + type: string + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + kind: + description: 'Expected values Shared: + multiple blob disks per storage + account Dedicated: single blob + disk per storage account Managed: + azure managed data disk (only in + managed availability set). defaults + to shared' + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: AzureFile represents an Azure + File Service mount on the host and bind + mount to the pod. + properties: + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretName: + description: the name of secret that + contains Azure Storage Account Name + and Key + type: string + shareName: + description: Share Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: CephFS represents a Ceph + FS mount on the host that shares a pod's + lifetime + properties: + monitors: + description: 'Required: Monitors is + a collection of Ceph monitors More + info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'Optional: Used as the + mounted root, rather than the full + Ceph tree, default is /' + type: string + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'Optional: SecretFile + is the path to key ring for User, + default is /etc/ceph/user.secret + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'Optional: SecretRef + is reference to the authentication + secret for User, default is empty. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + user: + description: 'Optional: User is the + rados user name, default is admin + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'Cinder represents a cinder + volume attached and mounted on kubelets + host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'Optional: points to + a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + volumeID: + description: 'volume id used to identify + the volume in cinder. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: If unspecified, each + key-value pair in the Data field + of the referenced ConfigMap will + be projected into the volume as + a file whose name is the key and + content is the value. If specified, + the listed keys will be projected + into the specified paths, and unlisted + keys will not be present. If a key + is specified which is not present + in the ConfigMap, the volume setup + will error unless it is marked optional. + Paths must be relative and may not + contain the '..' path or start with + '..'. + items: + description: Maps a string key to + a path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: The relative path + of the file to map the key + to. May not be an absolute + path. May not contain the + path element '..'. May not + start with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + csi: + description: CSI (Container Storage Interface) + represents storage that is handled by + an external CSI driver (Alpha feature). + properties: + driver: + description: Driver is the name of + the CSI driver that handles this + volume. Consult with your admin + for the correct name as registered + in the cluster. + type: string + fsType: + description: Filesystem type to mount. + Ex. "ext4", "xfs", "ntfs". If not + provided, the empty value is passed + to the associated CSI driver which + will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: NodePublishSecretRef + is a reference to the secret object + containing sensitive information + to pass to the CSI driver to complete + the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. + If the secret object contains more + than one secret, all secret references + are passed. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + readOnly: + description: Specifies a read-only + configuration for the volume. Defaults + to false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: VolumeAttributes stores + driver-specific properties that + are passed to the CSI driver. Consult + your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: DownwardAPI represents downward + API about the pod that should populate + this volume + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: Items is a list of downward + API volume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only annotations, + labels, name and namespace + are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms of, + defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or contain + the ''..'' path. Must be utf-8 + encoded. The first item of + the relative path must not + start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are currently + supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + description: Specifies the + output format of the exposed + resources, defaults to + "1" + type: string + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'EmptyDir represents a temporary + directory that shares a pod''s lifetime. + More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'What type of storage + medium should back this directory. + The default is "" which means to + use the node''s default medium. + Must be an empty string (default) + or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + description: 'Total amount of local + storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage + on memory medium EmptyDir would + be the minimum value between the + SizeLimit specified here and the + sum of memory limits of all containers + in a pod. The default is nil which + means that the limit is undefined. + More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + type: string + type: object + fc: + description: FC represents a Fibre Channel + resource that is attached to a kubelet's + host machine and then exposed to the + pod. + properties: + fsType: + description: 'Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + lun: + description: 'Optional: FC target + lun number' + format: int32 + type: integer + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts.' + type: boolean + targetWWNs: + description: 'Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'Optional: FC volume + world wide identifiers (wwids) Either + wwids or combination of targetWWNs + and lun must be set, but not both + simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: FlexVolume represents a generic + volume resource that is provisioned/attached + using an exec based plugin. + properties: + driver: + description: Driver is the name of + the driver to use for this volume. + type: string + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". The default + filesystem depends on FlexVolume + script. + type: string + options: + additionalProperties: + type: string + description: 'Optional: Extra command + options if any.' + type: object + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts.' + type: boolean + secretRef: + description: 'Optional: SecretRef + is reference to the secret object + containing sensitive information + to pass to the plugin scripts. This + may be empty if no secret object + is specified. If the secret object + contains more than one secret, all + secrets are passed to the plugin + scripts.' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + required: + - driver + type: object + flocker: + description: Flocker represents a Flocker + volume attached to a kubelet's host + machine. This depends on the Flocker + control service being running + properties: + datasetName: + description: Name of the dataset stored + as metadata -> name on the dataset + for Flocker should be considered + as deprecated + type: string + datasetUUID: + description: UUID of the dataset. + This is unique identifier of a Flocker + dataset + type: string + type: object + gcePersistentDisk: + description: 'GCEPersistentDisk represents + a GCE Disk resource that is attached + to a kubelet''s host machine and then + exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + partition: + description: 'The partition in the + volume that you want to mount. If + omitted, the default is to mount + by volume name. Examples: For volume + /dev/sda1, you specify the partition + as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can + leave the property empty). More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'Unique name of the PD + resource in GCE. Used to identify + the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'GitRepo represents a git + repository at a particular revision. + DEPRECATED: GitRepo is deprecated. To + provision a container with a git repo, + mount an EmptyDir into an InitContainer + that clones the repo using git, then + mount the EmptyDir into the Pod''s container.' + properties: + directory: + description: Target directory name. + Must not contain or start with '..'. If + '.' is supplied, the volume directory + will be the git repository. Otherwise, + if specified, the volume will contain + the git repository in the subdirectory + with the given name. + type: string + repository: + description: Repository URL + type: string + revision: + description: Commit hash for the specified + revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'Glusterfs represents a Glusterfs + mount on the host that shares a pod''s + lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'EndpointsName is the + endpoint name that details Glusterfs + topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'Path is the Glusterfs + volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'ReadOnly here will force + the Glusterfs volume to be mounted + with read-only permissions. Defaults + to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'HostPath represents a pre-existing + file or directory on the host machine + that is directly exposed to the container. + This is generally used for system agents + or other privileged things that are + allowed to see the host machine. Most + containers will NOT need this. More + info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + --- TODO(jonesdl) We need to restrict + who can use host directory mounts and + who can/can not mount host directories + as read/write.' + properties: + path: + description: 'Path of the directory + on the host. If the path is a symlink, + it will follow the link to the real + path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'Type for HostPath Volume + Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'ISCSI represents an ISCSI + Disk resource that is attached to a + kubelet''s host machine and then exposed + to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: whether support iSCSI + Discovery CHAP authentication + type: boolean + chapAuthSession: + description: whether support iSCSI + Session CHAP authentication + type: boolean + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + initiatorName: + description: Custom iSCSI Initiator + Name. If initiatorName is specified + with iscsiInterface simultaneously, + new iSCSI interface : will be created for the connection. + type: string + iqn: + description: Target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iSCSI Interface Name + that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: iSCSI Target Lun number. + format: int32 + type: integer + portals: + description: iSCSI Target Portal List. + The portal is either an IP or ip_addr:port + if the port is other than default + (typically TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. + type: boolean + secretRef: + description: CHAP Secret for iSCSI + target and initiator authentication + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + targetPortal: + description: iSCSI Target Portal. + The Portal is either an IP or ip_addr:port + if the port is other than default + (typically TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'Volume''s name. Must be + a DNS_LABEL and unique within the pod. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'NFS represents an NFS mount + on the host that shares a pod''s lifetime + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'Path that is exported + by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'ReadOnly here will force + the NFS export to be mounted with + read-only permissions. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'Server is the hostname + or IP address of the NFS server. + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'PersistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'ClaimName is the name + of a PersistentVolumeClaim in the + same namespace as the pod using + this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: Will force the ReadOnly + setting in VolumeMounts. Default + false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: PhotonPersistentDisk represents + a PhotonController persistent disk attached + and mounted on kubelets host machine + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + pdID: + description: ID that identifies Photon + Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: PortworxVolume represents + a portworx volume attached and mounted + on kubelets host machine + properties: + fsType: + description: FSType represents the + filesystem type to mount Must be + a filesystem type supported by the + host operating system. Ex. "ext4", + "xfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + volumeID: + description: VolumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: Items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: Mode bits to use on created + files by default. Must be a value + between 0 and 0777. Directories + within the path are not affected + by this setting. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set. + format: int32 + type: integer + sources: + description: list of volume projections + items: + description: Projection that may + be projected along with other + supported volume types + properties: + configMap: + description: information about + the configMap data to project + properties: + items: + description: If unspecified, + each key-value pair in + the Data field of the + referenced ConfigMap will + be projected into the + volume as a file whose + name is the key and content + is the value. If specified, + the listed keys will be + projected into the specified + paths, and unlisted keys + will not be present. If + a key is specified which + is not present in the + ConfigMap, the volume + setup will error unless + it is marked optional. + Paths must be relative + and may not contain the + '..' path or start with + '..'. + items: + description: Maps a string + key to a path within + a volume. + properties: + key: + description: The key + to project. + type: string + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: The relative + path of the file + to map the key to. + May not be an absolute + path. May not contain + the path element + '..'. May not start + with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the + referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful + fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether + the ConfigMap or its keys + must be defined + type: boolean + type: object + downwardAPI: + description: information about + the downwardAPI data to project + properties: + items: + description: Items is a + list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile + represents information + to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: + Selects a field + of the pod: only + annotations, labels, + name and namespace + are supported.' + properties: + apiVersion: + description: Version + of the schema + the FieldPath + is written in + terms of, defaults + to "v1". + type: string + fieldPath: + description: Path + of the field + to select in + the specified + API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: 'Required: + Path is the relative + path name of the + file to be created. + Must not be absolute + or contain the ''..'' + path. Must be utf-8 + encoded. The first + item of the relative + path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects + a resource of the + container: only + resources limits + and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container + name: required + for volumes, + optional for + env vars' + type: string + divisor: + description: Specifies + the output format + of the exposed + resources, defaults + to "1" + type: string + resource: + description: 'Required: + resource to + select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + description: information about + the secret data to project + properties: + items: + description: If unspecified, + each key-value pair in + the Data field of the + referenced Secret will + be projected into the + volume as a file whose + name is the key and content + is the value. If specified, + the listed keys will be + projected into the specified + paths, and unlisted keys + will not be present. If + a key is specified which + is not present in the + Secret, the volume setup + will error unless it is + marked optional. Paths + must be relative and may + not contain the '..' path + or start with '..'. + items: + description: Maps a string + key to a path within + a volume. + properties: + key: + description: The key + to project. + type: string + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: The relative + path of the file + to map the key to. + May not be an absolute + path. May not contain + the path element + '..'. May not start + with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the + referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful + fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether + the Secret or its key + must be defined + type: boolean + type: object + serviceAccountToken: + description: information about + the serviceAccountToken data + to project + properties: + audience: + description: Audience is + the intended audience + of the token. A recipient + of a token must identify + itself with an identifier + specified in the audience + of the token, and otherwise + should reject the token. + The audience defaults + to the identifier of the + apiserver. + type: string + expirationSeconds: + description: ExpirationSeconds + is the requested duration + of validity of the service + account token. As the + token approaches expiration, + the kubelet volume plugin + will proactively rotate + the service account token. + The kubelet will start + trying to rotate the token + if the token is older + than 80 percent of its + time to live or if the + token is older than 24 + hours.Defaults to 1 hour + and must be at least 10 + minutes. + format: int64 + type: integer + path: + description: Path is the + path relative to the mount + point of the file to project + the token into. + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + description: Quobyte represents a Quobyte + mount on the host that shares a pod's + lifetime + properties: + group: + description: Group to map volume access + to Default is no group + type: string + readOnly: + description: ReadOnly here will force + the Quobyte volume to be mounted + with read-only permissions. Defaults + to false. + type: boolean + registry: + description: Registry represents a + single or multiple Quobyte Registry + services specified as a string as + host:port pair (multiple entries + are separated with commas) which + acts as the central registry for + volumes + type: string + tenant: + description: Tenant owning the given + Quobyte volume in the Backend Used + with dynamically provisioned Quobyte + volumes, value is set by the plugin + type: string + user: + description: User to map volume access + to Defaults to serivceaccount user + type: string + volume: + description: Volume is a string that + references an already created Quobyte + volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'RBD represents a Rados Block + Device mount on the host that shares + a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + image: + description: 'The rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'Keyring is the path + to key ring for RBDUser. Default + is /etc/ceph/keyring. More info: + https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'A collection of Ceph + monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'The rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'SecretRef is name of + the authentication secret for RBDUser. + If provided overrides keyring. Default + is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + user: + description: 'The rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: ScaleIO represents a ScaleIO + persistent volume attached and mounted + on Kubernetes nodes. + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Default is + "xfs". + type: string + gateway: + description: The host address of the + ScaleIO API Gateway. + type: string + protectionDomain: + description: The name of the ScaleIO + Protection Domain for the configured + storage. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef references + to the secret for ScaleIO user and + other sensitive information. If + this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + sslEnabled: + description: Flag to enable/disable + SSL communication with Gateway, + default false + type: boolean + storageMode: + description: Indicates whether the + storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: The ScaleIO Storage Pool + associated with the protection domain. + type: string + system: + description: The name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: The name of a volume + already created in the ScaleIO system + that is associated with this volume + source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'Secret represents a secret + that should populate this volume. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: If unspecified, each + key-value pair in the Data field + of the referenced Secret will be + projected into the volume as a file + whose name is the key and content + is the value. If specified, the + listed keys will be projected into + the specified paths, and unlisted + keys will not be present. If a key + is specified which is not present + in the Secret, the volume setup + will error unless it is marked optional. + Paths must be relative and may not + contain the '..' path or start with + '..'. + items: + description: Maps a string key to + a path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: The relative path + of the file to map the key + to. May not be an absolute + path. May not contain the + path element '..'. May not + start with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: 'Name of the secret in + the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: StorageOS represents a StorageOS + volume attached and mounted on Kubernetes + nodes. + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef specifies the + secret to use for obtaining the + StorageOS API credentials. If not + specified, default values will be + attempted. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + volumeName: + description: VolumeName is the human-readable + name of the StorageOS volume. Volume + names are only unique within a namespace. + type: string + volumeNamespace: + description: VolumeNamespace specifies + the scope of the volume within StorageOS. If + no namespace is specified then the + Pod's namespace will be used. This + allows the Kubernetes name scoping + to be mirrored within StorageOS + for tighter integration. Set VolumeName + to any name to override the default + behaviour. Set to "default" if you + are not using namespaces within + StorageOS. Namespaces that do not + pre-exist within StorageOS will + be created. + type: string + type: object + vsphereVolume: + description: VsphereVolume represents + a vSphere volume attached and mounted + on kubelets host machine + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + storagePolicyID: + description: Storage Policy Based + Management (SPBM) profile ID associated + with the StoragePolicyName. + type: string + storagePolicyName: + description: Storage Policy Based + Management (SPBM) profile name. + type: string + volumePath: + description: Path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + httpProbe/inputs: + type: object + required: + - url + - method + properties: + url: + type: string + minLength: 1 + insecureSkipVerify: + type: boolean + method: + type: object + minProperties: 1 + properties: + get: + type: object + required: + - criteria + - responseCode + properties: + criteria: + type: string + minLength: 1 + responseCode: + type: string + minLength: 1 + post: + type: object + required: + - criteria + - responseCode + properties: + contentType: + type: string + minLength: 1 + body: + type: string + bodyPath: + type: string + criteria: + type: string + minLength: 1 + responseCode: + type: string + minLength: 1 + promProbe/inputs: + type: object + required: + - endpoint + - comparator + properties: + endpoint: + type: string + query: + type: string + queryPath: + type: string + comparator: + type: object + required: + - criteria + - value + properties: + criteria: + type: string + value: + type: string + runProperties: + type: object + minProperties: 2 + required: + - probeTimeout + - interval + properties: + evaluationTimeout: + type: string + probeTimeout: + type: string + interval: + type: string + retry: + type: integer + attempt: + type: integer + probePollingInterval: + type: string + initialDelaySeconds: + type: integer + initialDelay: + type: string + verbosity: + type: string + stopOnFailure: + type: boolean + sloProbe/inputs: + description: inputs needed for the SLO probe + required: + - platformEndpoint + - sloIdentifier + - sloSourceMetadata + - comparator + properties: + comparator: + description: Comparator check for the correctness + of the probe output + required: + - criteria + - value + properties: + criteria: + description: Criteria for matching data it + supports >=, <=, ==, >, <, != for int and + float it supports equal, notEqual, contains + for string + type: string + type: + description: Type of data it can be int, float, + string + type: string + value: + description: Value contains relative value + for criteria + type: string + type: object + evaluationWindow: + description: EvaluationWindow is the time period + for which the metrics will be evaluated + properties: + evaluationEndTime: + description: End time of evaluation + type: integer + evaluationStartTime: + description: Start time of evaluation + type: integer + type: object + platformEndpoint: + description: PlatformEndpoint for the monitoring + service endpoint + type: string + insecureSkipVerify: + description: InsecureSkipVerify flag to skip certificate + checks + type: boolean + sloIdentifier: + description: SLOIdentifier for fetching the details + of the SLO + type: string + sloSourceMetadata: + description: SLOSourceMetadata consists of required + metadata details to fetch metric data + required: + - apiTokenSecret + - scope + properties: + apiTokenSecret: + description: APITokenSecret for authenticating + with the platform service + type: string + scope: + description: Scope required for fetching details + required: + - accountIdentifier + - orgIdentifier + - projectIdentifier + properties: + accountIdentifier: + description: AccountIdentifier for account + ID + type: string + orgIdentifier: + description: OrgIdentifier for organization + ID + type: string + projectIdentifier: + description: ProjectIdentifier for project + ID + type: string + type: object + type: object + type: object + mode: + type: string + pattern: ^(SOT|EOT|Edge|Continuous|OnChaos)$ + minLength: 1 + data: + type: string + components: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + statusCheckTimeouts: + type: object + properties: + delay: + type: integer + timeout: + type: integer + nodeSelector: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + allowEmptyValue: false + value: + type: string + minLength: 1 + allowEmptyValue: false + experimentImage: + type: string + env: + type: array + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a + double $$, ie: $$(VAR_NAME). Escaped references + will never be expanded, regardless of whether + the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: + supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, spec.nodeName, + spec.serviceAccountName, status.hostIP, + status.podIP.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, defaults + to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + configMaps: + type: array + items: + type: object + properties: + name: + type: string + mountPath: + type: string + secrets: + type: array + items: + type: object + properties: + name: + type: string + mountPath: + type: string + experimentAnnotations: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + allowEmptyValue: false + value: + type: string + minLength: 1 + allowEmptyValue: false + tolerations: + description: Pod's tolerations. + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + concurrencyPolicy: + type: string + scheduleState: + type: string + schedule: + oneOf: + - required: + - now + - required: + - once + - required: + - repeat + properties: + now: + type: boolean + once: + properties: + executionTime: + format: date-time + type: string + type: object + repeat: + properties: + timeRange: + properties: + endTime: + format: date-time + type: string + startTime: + format: date-time + type: string + type: object + workHours: + properties: + includedHours: + type: string + type: object + required: + - includedHours + workDays: + properties: + includedDays: + pattern: ((Mon|Tue|Wed|Thu|Fri|Sat|Sun)(,))*(Mon|Tue|Wed|Thu|Fri|Sat|Sun) + type: string + type: object + required: + - includedDays + properties: + properties: + minChaosInterval: + properties: + hour: + properties: + everyNthHour: + type: integer + minuteOfTheHour: + type: integer + type: object + minute: + properties: + everyNthMinute: + type: integer + type: object + type: object + minProperties: 1 + maxProperties: 1 + random: + type: boolean + type: object + required: + - minChaosInterval + type: object + required: + - properties + type: object + status: + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: {} + conversion: + strategy: None diff --git a/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-operator.yaml b/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-operator.yaml index 72b871c27cf..73886cd3369 100644 --- a/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-operator.yaml +++ b/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-operator.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-serviceaccount app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -22,7 +22,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-role app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -59,7 +59,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-rolebinding app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -81,7 +81,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -97,7 +97,7 @@ spec: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -106,13 +106,13 @@ spec: serviceAccountName: litmus containers: - name: chaos-operator - image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-operator:3.12.0 + image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-operator:3.13.0 command: - chaos-operator imagePullPolicy: Always env: - name: CHAOS_RUNNER_IMAGE - value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.12.0" + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.13.0" - name: WATCH_NAMESPACE valueFrom: fieldRef: diff --git a/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-scheduler.yaml b/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-scheduler.yaml index 351c73bc088..a63ff9539fb 100644 --- a/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-scheduler.yaml +++ b/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-scheduler.yaml @@ -16,7 +16,7 @@ spec: containers: - name: chaos-scheduler # Replace this with the built image name - image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-scheduler:3.12.0 + image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-scheduler:3.13.0 command: - chaos-scheduler imagePullPolicy: IfNotPresent diff --git a/mkdocs/docs/litmus-namespaced-scope/litmus-ns-experiment-rbac.yaml b/mkdocs/docs/litmus-namespaced-scope/litmus-ns-experiment-rbac.yaml index 51da09a58e8..cd7b81d0beb 100644 --- a/mkdocs/docs/litmus-namespaced-scope/litmus-ns-experiment-rbac.yaml +++ b/mkdocs/docs/litmus-namespaced-scope/litmus-ns-experiment-rbac.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-serviceaccount app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -22,7 +22,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-role app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -59,7 +59,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-rolebinding app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl diff --git a/mkdocs/docs/litmus-namespaced-scope/litmus-ns-rbac.yaml b/mkdocs/docs/litmus-namespaced-scope/litmus-ns-rbac.yaml index cbb6eb09215..db76c69f3c6 100644 --- a/mkdocs/docs/litmus-namespaced-scope/litmus-ns-rbac.yaml +++ b/mkdocs/docs/litmus-namespaced-scope/litmus-ns-rbac.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-serviceaccount app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -22,7 +22,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-role app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl @@ -62,7 +62,7 @@ metadata: app.kubernetes.io/name: litmus # provide unique instance-id if applicable # app.kubernetes.io/instance: litmus-abcxzy - app.kubernetes.io/version: v3.12.0 + app.kubernetes.io/version: v3.13.0 app.kubernetes.io/component: operator-rolebinding app.kubernetes.io/part-of: litmus app.kubernetes.io/managed-by: kubectl diff --git a/mkdocs/docs/litmus-operator-v3.13.0.yaml b/mkdocs/docs/litmus-operator-v3.13.0.yaml new file mode 100644 index 00000000000..26a52867759 --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.13.0.yaml @@ -0,0 +1,3004 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: litmus +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: litmus + namespace: litmus + labels: + app.kubernetes.io/name: litmus + # provide unique instance-id if applicable + # app.kubernetes.io/instance: litmus-abcxzy + app.kubernetes.io/version: v3.13.0 + app.kubernetes.io/component: operator-serviceaccount + app.kubernetes.io/part-of: litmus + app.kubernetes.io/managed-by: kubectl + name: litmus +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: litmus + labels: + app.kubernetes.io/name: litmus + # provide unique instance-id if applicable + # app.kubernetes.io/instance: litmus-abcxzy + app.kubernetes.io/version: v3.13.0 + app.kubernetes.io/component: operator-clusterrole + app.kubernetes.io/part-of: litmus + app.kubernetes.io/managed-by: kubectl + name: litmus +rules: + # ******************************************************************* + # Permissions needed for creation and discovery of chaos component + # ******************************************************************* + +# for checking app parent resources if they are eligible chaos candidates +- apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get","list"] + +# for checking app parent resources if they are eligible chaos candidates +- apiGroups: [""] + resources: ["secrets"] + verbs: ["get","list"] + +# for checking (openshift) app parent resources if they are eligible chaos candidates +- apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["get","list"] + +# for operator to perform asset discovery of available resources on the cluster which can be picked as a target for chaos +- apiGroups: ["apps"] + resources: ["deployments", "daemonsets", "replicasets", "statefulsets"] + verbs: ["get","list"] + +# for operator to perform asset discovery of experiment jobs +- apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["get","list"] + +# for checking (argo) app parent resources if they are eligible chaos candidates +- apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["get","list"] + +# for creating and monitoring the chaos-runner pods +- apiGroups: [""] + resources: ["pods","events"] + verbs: ["get","create","update","patch","delete","list","watch","deletecollection"] + +# for operator to create or get the service for mertics +- apiGroups: [""] + resources: ["services"] + verbs: ["create","update","get","list","watch","delete"] + +# for operator to create and manage configmap to handle race condition +- apiGroups: [""] + resources: ["configmaps"] + verbs: ["create","update","get","list","watch","delete"] + +# for operator to perform removal of experiment jobs +- apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["delete","deletecollection"] + +# for creation, status polling and deletion of litmus chaos resources used within an experiment +- apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosexperiments","chaosresults"] + verbs: ["get","create","update","patch","delete","list","watch","deletecollection"] + +# for validation of existance of chaosresult crd +- apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["list","get"] + +# for managing litmus resource deletion +- apiGroups: ["litmuschaos.io"] + resources: ["chaosengines/finalizers"] + verbs: ["update"] + +# for leader election in case of multireplica +- apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get","create","list","update","delete"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: litmus + labels: + app.kubernetes.io/name: litmus + # provide unique instance-id if applicable + # app.kubernetes.io/instance: litmus-abcxzy + app.kubernetes.io/version: v3.13.0 + app.kubernetes.io/component: operator-clusterrolebinding + app.kubernetes.io/part-of: litmus + app.kubernetes.io/managed-by: kubectl + name: litmus +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: litmus +subjects: +- kind: ServiceAccount + name: litmus + namespace: litmus +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: litmus + # provide unique instance-id if applicable + # app.kubernetes.io/instance: litmus-abcxzy + app.kubernetes.io/version: v3.13.0 + app.kubernetes.io/component: operator + app.kubernetes.io/part-of: litmus + app.kubernetes.io/managed-by: kubectl + name: litmus + name: chaos-operator-ce + namespace: litmus +spec: + replicas: 1 + selector: + matchLabels: + name: chaos-operator + template: + metadata: + labels: + app.kubernetes.io/name: litmus + # provide unique instance-id if applicable + # app.kubernetes.io/instance: litmus-abcxzy + app.kubernetes.io/version: v3.13.0 + app.kubernetes.io/component: operator + app.kubernetes.io/part-of: litmus + app.kubernetes.io/managed-by: kubectl + name: chaos-operator + spec: + serviceAccountName: litmus + containers: + - name: chaos-operator + image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-operator:3.13.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.13.0" + - name: WATCH_NAMESPACE + value: "" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: OPERATOR_NAME + value: "chaos-operator" +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosengines.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosEngine + listKind: ChaosEngineList + plural: chaosengines + singular: chaosengine + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + jobCleanUpPolicy: + type: string + pattern: ^(delete|retain)$ + # alternate ways to do this in case of complex pattern matches + #oneOf: + # - pattern: '^delete$' + # - pattern: '^retain$' + defaultHealthCheck: + type: boolean + appinfo: + type: object + properties: + appkind: + type: string + pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$ + applabel: + type: string + appns: + type: string + selectors: + type: object + properties: + pods: + items: + properties: + names: + type: string + namespace: + type: string + required: + - names + - namespace + type: object + type: array + workloads: + items: + properties: + kind: + type: string + pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$ + labels: + type: string + names: + type: string + namespace: + type: string + oneOf: + - required: [ names ] + - required: [ labels ] + required: + - kind + - namespace + type: object + type: array + oneOf: + - required: [ pods ] + - required: [ workloads ] + auxiliaryAppInfo: + type: string + engineState: + type: string + pattern: ^(active|stop)$ + chaosServiceAccount: + type: string + terminationGracePeriodSeconds: + type: integer + components: + type: object + properties: + sidecar: + type: array + items: + type: object + x-kubernetes-preserve-unknown-fields: true + properties: + env: + description: ENV contains ENV passed to the sidecar container + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are + expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, the + reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a double + $$, ie: $$(VAR_NAME). Escaped references will never + be expanded, regardless of whether the variable + exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: EnvFrom for the sidecar container + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + secrets: + items: + properties: + mountPath: + type: string + name: + type: string + required: + - mountPath + - name + type: object + type: array + runner: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + image: + type: string + type: + type: string + pattern: ^(go)$ + runnerAnnotations: + type: object + runnerLabels: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + value: + type: string + minLength: 1 + tolerations: + description: Pod's tolerations. + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + experiments: + type: array + items: + type: object + properties: + name: + type: string + spec: + type: object + properties: + probe: + type: array + items: + type: object + required: + - name + - type + - mode + - runProperties + properties: + name: + type: string + type: + type: string + minLength: 1 + pattern: ^(k8sProbe|httpProbe|cmdProbe|promProbe)$ + k8sProbe/inputs: + type: object + required: + - version + - resource + - operation + properties: + group: + type: string + version: + type: string + resource: + type: string + namespace: + type: string + resourceNames: + type: string + fieldSelector: + type: string + labelSelector: + type: string + operation: + type: string + pattern: ^(present|absent|create|delete)$ + minLength: 1 + cmdProbe/inputs: + type: object + required: + - command + - comparator + properties: + command: + type: string + minLength: 1 + comparator: + type: object + required: + - type + - criteria + - value + properties: + type: + type: string + minLength: 1 + pattern: ^(int|float|string)$ + criteria: + type: string + value: + type: string + source: + description: The external pod where we have to run the + probe commands. It will run the commands inside the experiment pod itself(inline mode) if source contains a nil value + required: + - image + properties: + annotations: + additionalProperties: + type: string + description: Annotations for the source pod + type: object + args: + description: Args for the source pod + items: + type: string + type: array + command: + description: Command for the source pod + items: + type: string + type: array + env: + description: ENVList contains ENV passed to + the source pod + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. The $(VAR_NAME) syntax can + be escaped with a double $$, ie: $$(VAR_NAME). + Escaped references will never be expanded, + regardless of whether the variable exists + or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if + value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be + defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in + terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field + to select in the specified API + version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: + required for volumes, optional + for env vars' + type: string + divisor: + description: Specifies the output + format of the exposed resources, + defaults to "1" + type: string + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + hostNetwork: + description: HostNetwork define the hostNetwork + of the external pod it supports boolean values + and default value is false + type: boolean + inheritInputs: + description: InheritInputs define to inherit experiment + details in probe pod it supports boolean values + and default value is false. + type: boolean + image: + description: Image for the source pod + type: string + imagePullPolicy: + description: ImagePullPolicy for the source pod + type: string + imagePullSecrets: + description: ImagePullSecrets for source pod + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent' + type: string + type: object + type: array + labels: + additionalProperties: + type: string + description: Labels for the source pod + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector for the source pod + type: object + tolerations: + description: Tolerations for the source pod + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + privileged: + description: Privileged for the source pod + type: boolean + volumeMount: + description: VolumesMount for the source pod + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container + at which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name + of a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mounted. Defaults to "" (volume's + root). + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + should be mounted. Behaves similarly + to SubPath but environment variable + references $(VAR_NAME) are expanded + using the container's environment. Defaults + to "" (volume's root). SubPathExpr and + SubPath are mutually exclusive. This + field is beta in 1.15. + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + description: Volumes for the source pod + items: + description: Volume represents a named volume + in a pod that may be accessed by any container + in the pod. + properties: + awsElasticBlockStore: + description: 'AWSElasticBlockStore represents + an AWS Disk resource that is attached + to a kubelet''s host machine and then + exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + partition: + description: 'The partition in the + volume that you want to mount. If + omitted, the default is to mount + by volume name. Examples: For volume + /dev/sda1, you specify the partition + as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'Specify "true" to force + and set the ReadOnly property in + VolumeMounts to "true". If omitted, + the default is "false". More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'Unique ID of the persistent + disk resource in AWS (Amazon EBS + volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: AzureDisk represents an Azure + Data Disk mount on the host and bind + mount to the pod. + properties: + cachingMode: + description: 'Host Caching mode: None, + Read Only, Read Write.' + type: string + diskName: + description: The Name of the data + disk in the blob storage + type: string + diskURI: + description: The URI the data disk + in the blob storage + type: string + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + kind: + description: 'Expected values Shared: + multiple blob disks per storage + account Dedicated: single blob + disk per storage account Managed: + azure managed data disk (only in + managed availability set). defaults + to shared' + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: AzureFile represents an Azure + File Service mount on the host and bind + mount to the pod. + properties: + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretName: + description: the name of secret that + contains Azure Storage Account Name + and Key + type: string + shareName: + description: Share Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: CephFS represents a Ceph + FS mount on the host that shares a pod's + lifetime + properties: + monitors: + description: 'Required: Monitors is + a collection of Ceph monitors More + info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'Optional: Used as the + mounted root, rather than the full + Ceph tree, default is /' + type: string + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'Optional: SecretFile + is the path to key ring for User, + default is /etc/ceph/user.secret + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'Optional: SecretRef + is reference to the authentication + secret for User, default is empty. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + user: + description: 'Optional: User is the + rados user name, default is admin + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'Cinder represents a cinder + volume attached and mounted on kubelets + host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'Optional: points to + a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + volumeID: + description: 'volume id used to identify + the volume in cinder. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: If unspecified, each + key-value pair in the Data field + of the referenced ConfigMap will + be projected into the volume as + a file whose name is the key and + content is the value. If specified, + the listed keys will be projected + into the specified paths, and unlisted + keys will not be present. If a key + is specified which is not present + in the ConfigMap, the volume setup + will error unless it is marked optional. + Paths must be relative and may not + contain the '..' path or start with + '..'. + items: + description: Maps a string key to + a path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: The relative path + of the file to map the key + to. May not be an absolute + path. May not contain the + path element '..'. May not + start with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + csi: + description: CSI (Container Storage Interface) + represents storage that is handled by + an external CSI driver (Alpha feature). + properties: + driver: + description: Driver is the name of + the CSI driver that handles this + volume. Consult with your admin + for the correct name as registered + in the cluster. + type: string + fsType: + description: Filesystem type to mount. + Ex. "ext4", "xfs", "ntfs". If not + provided, the empty value is passed + to the associated CSI driver which + will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: NodePublishSecretRef + is a reference to the secret object + containing sensitive information + to pass to the CSI driver to complete + the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. + If the secret object contains more + than one secret, all secret references + are passed. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + readOnly: + description: Specifies a read-only + configuration for the volume. Defaults + to false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: VolumeAttributes stores + driver-specific properties that + are passed to the CSI driver. Consult + your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: DownwardAPI represents downward + API about the pod that should populate + this volume + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: Items is a list of downward + API volume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only annotations, + labels, name and namespace + are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms of, + defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or contain + the ''..'' path. Must be utf-8 + encoded. The first item of + the relative path must not + start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are currently + supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + description: Specifies the + output format of the exposed + resources, defaults to + "1" + type: string + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'EmptyDir represents a temporary + directory that shares a pod''s lifetime. + More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'What type of storage + medium should back this directory. + The default is "" which means to + use the node''s default medium. + Must be an empty string (default) + or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + description: 'Total amount of local + storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage + on memory medium EmptyDir would + be the minimum value between the + SizeLimit specified here and the + sum of memory limits of all containers + in a pod. The default is nil which + means that the limit is undefined. + More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + type: string + type: object + fc: + description: FC represents a Fibre Channel + resource that is attached to a kubelet's + host machine and then exposed to the + pod. + properties: + fsType: + description: 'Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + lun: + description: 'Optional: FC target + lun number' + format: int32 + type: integer + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts.' + type: boolean + targetWWNs: + description: 'Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'Optional: FC volume + world wide identifiers (wwids) Either + wwids or combination of targetWWNs + and lun must be set, but not both + simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: FlexVolume represents a generic + volume resource that is provisioned/attached + using an exec based plugin. + properties: + driver: + description: Driver is the name of + the driver to use for this volume. + type: string + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". The default + filesystem depends on FlexVolume + script. + type: string + options: + additionalProperties: + type: string + description: 'Optional: Extra command + options if any.' + type: object + readOnly: + description: 'Optional: Defaults to + false (read/write). ReadOnly here + will force the ReadOnly setting + in VolumeMounts.' + type: boolean + secretRef: + description: 'Optional: SecretRef + is reference to the secret object + containing sensitive information + to pass to the plugin scripts. This + may be empty if no secret object + is specified. If the secret object + contains more than one secret, all + secrets are passed to the plugin + scripts.' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + required: + - driver + type: object + flocker: + description: Flocker represents a Flocker + volume attached to a kubelet's host + machine. This depends on the Flocker + control service being running + properties: + datasetName: + description: Name of the dataset stored + as metadata -> name on the dataset + for Flocker should be considered + as deprecated + type: string + datasetUUID: + description: UUID of the dataset. + This is unique identifier of a Flocker + dataset + type: string + type: object + gcePersistentDisk: + description: 'GCEPersistentDisk represents + a GCE Disk resource that is attached + to a kubelet''s host machine and then + exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + partition: + description: 'The partition in the + volume that you want to mount. If + omitted, the default is to mount + by volume name. Examples: For volume + /dev/sda1, you specify the partition + as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can + leave the property empty). More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'Unique name of the PD + resource in GCE. Used to identify + the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'GitRepo represents a git + repository at a particular revision. + DEPRECATED: GitRepo is deprecated. To + provision a container with a git repo, + mount an EmptyDir into an InitContainer + that clones the repo using git, then + mount the EmptyDir into the Pod''s container.' + properties: + directory: + description: Target directory name. + Must not contain or start with '..'. If + '.' is supplied, the volume directory + will be the git repository. Otherwise, + if specified, the volume will contain + the git repository in the subdirectory + with the given name. + type: string + repository: + description: Repository URL + type: string + revision: + description: Commit hash for the specified + revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'Glusterfs represents a Glusterfs + mount on the host that shares a pod''s + lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'EndpointsName is the + endpoint name that details Glusterfs + topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'Path is the Glusterfs + volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'ReadOnly here will force + the Glusterfs volume to be mounted + with read-only permissions. Defaults + to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'HostPath represents a pre-existing + file or directory on the host machine + that is directly exposed to the container. + This is generally used for system agents + or other privileged things that are + allowed to see the host machine. Most + containers will NOT need this. More + info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + --- TODO(jonesdl) We need to restrict + who can use host directory mounts and + who can/can not mount host directories + as read/write.' + properties: + path: + description: 'Path of the directory + on the host. If the path is a symlink, + it will follow the link to the real + path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'Type for HostPath Volume + Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'ISCSI represents an ISCSI + Disk resource that is attached to a + kubelet''s host machine and then exposed + to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: whether support iSCSI + Discovery CHAP authentication + type: boolean + chapAuthSession: + description: whether support iSCSI + Session CHAP authentication + type: boolean + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + initiatorName: + description: Custom iSCSI Initiator + Name. If initiatorName is specified + with iscsiInterface simultaneously, + new iSCSI interface : will be created for the connection. + type: string + iqn: + description: Target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iSCSI Interface Name + that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: iSCSI Target Lun number. + format: int32 + type: integer + portals: + description: iSCSI Target Portal List. + The portal is either an IP or ip_addr:port + if the port is other than default + (typically TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. + type: boolean + secretRef: + description: CHAP Secret for iSCSI + target and initiator authentication + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + targetPortal: + description: iSCSI Target Portal. + The Portal is either an IP or ip_addr:port + if the port is other than default + (typically TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'Volume''s name. Must be + a DNS_LABEL and unique within the pod. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'NFS represents an NFS mount + on the host that shares a pod''s lifetime + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'Path that is exported + by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'ReadOnly here will force + the NFS export to be mounted with + read-only permissions. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'Server is the hostname + or IP address of the NFS server. + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'PersistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'ClaimName is the name + of a PersistentVolumeClaim in the + same namespace as the pod using + this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: Will force the ReadOnly + setting in VolumeMounts. Default + false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: PhotonPersistentDisk represents + a PhotonController persistent disk attached + and mounted on kubelets host machine + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + pdID: + description: ID that identifies Photon + Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: PortworxVolume represents + a portworx volume attached and mounted + on kubelets host machine + properties: + fsType: + description: FSType represents the + filesystem type to mount Must be + a filesystem type supported by the + host operating system. Ex. "ext4", + "xfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + volumeID: + description: VolumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: Items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: Mode bits to use on created + files by default. Must be a value + between 0 and 0777. Directories + within the path are not affected + by this setting. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set. + format: int32 + type: integer + sources: + description: list of volume projections + items: + description: Projection that may + be projected along with other + supported volume types + properties: + configMap: + description: information about + the configMap data to project + properties: + items: + description: If unspecified, + each key-value pair in + the Data field of the + referenced ConfigMap will + be projected into the + volume as a file whose + name is the key and content + is the value. If specified, + the listed keys will be + projected into the specified + paths, and unlisted keys + will not be present. If + a key is specified which + is not present in the + ConfigMap, the volume + setup will error unless + it is marked optional. + Paths must be relative + and may not contain the + '..' path or start with + '..'. + items: + description: Maps a string + key to a path within + a volume. + properties: + key: + description: The key + to project. + type: string + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: The relative + path of the file + to map the key to. + May not be an absolute + path. May not contain + the path element + '..'. May not start + with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the + referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful + fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether + the ConfigMap or its keys + must be defined + type: boolean + type: object + downwardAPI: + description: information about + the downwardAPI data to project + properties: + items: + description: Items is a + list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile + represents information + to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: + Selects a field + of the pod: only + annotations, labels, + name and namespace + are supported.' + properties: + apiVersion: + description: Version + of the schema + the FieldPath + is written in + terms of, defaults + to "v1". + type: string + fieldPath: + description: Path + of the field + to select in + the specified + API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: 'Required: + Path is the relative + path name of the + file to be created. + Must not be absolute + or contain the ''..'' + path. Must be utf-8 + encoded. The first + item of the relative + path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects + a resource of the + container: only + resources limits + and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container + name: required + for volumes, + optional for + env vars' + type: string + divisor: + description: Specifies + the output format + of the exposed + resources, defaults + to "1" + type: string + resource: + description: 'Required: + resource to + select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + description: information about + the secret data to project + properties: + items: + description: If unspecified, + each key-value pair in + the Data field of the + referenced Secret will + be projected into the + volume as a file whose + name is the key and content + is the value. If specified, + the listed keys will be + projected into the specified + paths, and unlisted keys + will not be present. If + a key is specified which + is not present in the + Secret, the volume setup + will error unless it is + marked optional. Paths + must be relative and may + not contain the '..' path + or start with '..'. + items: + description: Maps a string + key to a path within + a volume. + properties: + key: + description: The key + to project. + type: string + mode: + description: 'Optional: + mode bits to use + on this file, must + be a value between + 0 and 0777. If not + specified, the volume + defaultMode will + be used. This might + be in conflict with + other options that + affect the file + mode, like fsGroup, + and the result can + be other mode bits + set.' + format: int32 + type: integer + path: + description: The relative + path of the file + to map the key to. + May not be an absolute + path. May not contain + the path element + '..'. May not start + with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the + referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful + fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether + the Secret or its key + must be defined + type: boolean + type: object + serviceAccountToken: + description: information about + the serviceAccountToken data + to project + properties: + audience: + description: Audience is + the intended audience + of the token. A recipient + of a token must identify + itself with an identifier + specified in the audience + of the token, and otherwise + should reject the token. + The audience defaults + to the identifier of the + apiserver. + type: string + expirationSeconds: + description: ExpirationSeconds + is the requested duration + of validity of the service + account token. As the + token approaches expiration, + the kubelet volume plugin + will proactively rotate + the service account token. + The kubelet will start + trying to rotate the token + if the token is older + than 80 percent of its + time to live or if the + token is older than 24 + hours.Defaults to 1 hour + and must be at least 10 + minutes. + format: int64 + type: integer + path: + description: Path is the + path relative to the mount + point of the file to project + the token into. + type: string + required: + - path + type: object + type: object + type: array + required: + - sources + type: object + quobyte: + description: Quobyte represents a Quobyte + mount on the host that shares a pod's + lifetime + properties: + group: + description: Group to map volume access + to Default is no group + type: string + readOnly: + description: ReadOnly here will force + the Quobyte volume to be mounted + with read-only permissions. Defaults + to false. + type: boolean + registry: + description: Registry represents a + single or multiple Quobyte Registry + services specified as a string as + host:port pair (multiple entries + are separated with commas) which + acts as the central registry for + volumes + type: string + tenant: + description: Tenant owning the given + Quobyte volume in the Backend Used + with dynamically provisioned Quobyte + volumes, value is set by the plugin + type: string + user: + description: User to map volume access + to Defaults to serivceaccount user + type: string + volume: + description: Volume is a string that + references an already created Quobyte + volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'RBD represents a Rados Block + Device mount on the host that shares + a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'Filesystem type of the + volume that you want to mount. Tip: + Ensure that the filesystem type + is supported by the host operating + system. Examples: "ext4", "xfs", + "ntfs". Implicitly inferred to be + "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in + the filesystem from compromising + the machine' + type: string + image: + description: 'The rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'Keyring is the path + to key ring for RBDUser. Default + is /etc/ceph/keyring. More info: + https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'A collection of Ceph + monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'The rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'ReadOnly here will force + the ReadOnly setting in VolumeMounts. + Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'SecretRef is name of + the authentication secret for RBDUser. + If provided overrides keyring. Default + is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + user: + description: 'The rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: ScaleIO represents a ScaleIO + persistent volume attached and mounted + on Kubernetes nodes. + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Default is + "xfs". + type: string + gateway: + description: The host address of the + ScaleIO API Gateway. + type: string + protectionDomain: + description: The name of the ScaleIO + Protection Domain for the configured + storage. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef references + to the secret for ScaleIO user and + other sensitive information. If + this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + sslEnabled: + description: Flag to enable/disable + SSL communication with Gateway, + default false + type: boolean + storageMode: + description: Indicates whether the + storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: The ScaleIO Storage Pool + associated with the protection domain. + type: string + system: + description: The name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: The name of a volume + already created in the ScaleIO system + that is associated with this volume + source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'Secret represents a secret + that should populate this volume. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'Optional: mode bits + to use on created files by default. + Must be a value between 0 and 0777. + Defaults to 0644. Directories within + the path are not affected by this + setting. This might be in conflict + with other options that affect the + file mode, like fsGroup, and the + result can be other mode bits set.' + format: int32 + type: integer + items: + description: If unspecified, each + key-value pair in the Data field + of the referenced Secret will be + projected into the volume as a file + whose name is the key and content + is the value. If specified, the + listed keys will be projected into + the specified paths, and unlisted + keys will not be present. If a key + is specified which is not present + in the Secret, the volume setup + will error unless it is marked optional. + Paths must be relative and may not + contain the '..' path or start with + '..'. + items: + description: Maps a string key to + a path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode + bits to use on this file, + must be a value between 0 + and 0777. If not specified, + the volume defaultMode will + be used. This might be in + conflict with other options + that affect the file mode, + like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: The relative path + of the file to map the key + to. May not be an absolute + path. May not contain the + path element '..'. May not + start with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: 'Name of the secret in + the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: StorageOS represents a StorageOS + volume attached and mounted on Kubernetes + nodes. + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). + ReadOnly here will force the ReadOnly + setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef specifies the + secret to use for obtaining the + StorageOS API credentials. If not + specified, default values will be + attempted. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + type: object + volumeName: + description: VolumeName is the human-readable + name of the StorageOS volume. Volume + names are only unique within a namespace. + type: string + volumeNamespace: + description: VolumeNamespace specifies + the scope of the volume within StorageOS. If + no namespace is specified then the + Pod's namespace will be used. This + allows the Kubernetes name scoping + to be mirrored within StorageOS + for tighter integration. Set VolumeName + to any name to override the default + behaviour. Set to "default" if you + are not using namespaces within + StorageOS. Namespaces that do not + pre-exist within StorageOS will + be created. + type: string + type: object + vsphereVolume: + description: VsphereVolume represents + a vSphere volume attached and mounted + on kubelets host machine + properties: + fsType: + description: Filesystem type to mount. + Must be a filesystem type supported + by the host operating system. Ex. + "ext4", "xfs", "ntfs". Implicitly + inferred to be "ext4" if unspecified. + type: string + storagePolicyID: + description: Storage Policy Based + Management (SPBM) profile ID associated + with the StoragePolicyName. + type: string + storagePolicyName: + description: Storage Policy Based + Management (SPBM) profile name. + type: string + volumePath: + description: Path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + httpProbe/inputs: + type: object + required: + - url + - method + properties: + url: + type: string + minLength: 1 + insecureSkipVerify: + type: boolean + method: + type: object + minProperties: 1 + properties: + get: + type: object + required: + - criteria + - responseCode + properties: + criteria: + type: string + minLength: 1 + responseCode: + type: string + minLength: 1 + post: + type: object + required: + - criteria + - responseCode + properties: + contentType: + type: string + minLength: 1 + body: + type: string + bodyPath: + type: string + criteria: + type: string + minLength: 1 + responseCode: + type: string + minLength: 1 + promProbe/inputs: + type: object + required: + - endpoint + - comparator + properties: + endpoint: + type: string + query: + type: string + queryPath: + type: string + comparator: + type: object + required: + - criteria + - value + properties: + criteria: + type: string + value: + type: string + runProperties: + type: object + minProperties: 2 + required: + - probeTimeout + - interval + properties: + probeTimeout: + type: string + interval: + type: string + retry: + type: integer + attempt: + type: integer + probePollingInterval: + type: string + initialDelay: + type: string + verbosity: + type: string + initialDelaySeconds: + type: integer + stopOnFailure: + type: boolean + mode: + type: string + pattern: ^(SOT|EOT|Edge|Continuous|OnChaos)$ + minLength: 1 + data: + type: string + components: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + statusCheckTimeouts: + type: object + properties: + delay: + type: integer + timeout: + type: integer + nodeSelector: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + allowEmptyValue: false + value: + type: string + minLength: 1 + allowEmptyValue: false + experimentImage: + type: string + env: + type: array + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a + double $$, ie: $$(VAR_NAME). Escaped references + will never be expanded, regardless of whether + the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: + supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, spec.nodeName, + spec.serviceAccountName, status.hostIP, + status.podIP.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, defaults + to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + configMaps: + type: array + items: + type: object + properties: + name: + type: string + mountPath: + type: string + secrets: + type: array + items: + type: object + properties: + name: + type: string + mountPath: + type: string + experimentAnnotations: + type: object + additionalProperties: + type: string + properties: + key: + type: string + minLength: 1 + allowEmptyValue: false + value: + type: string + minLength: 1 + allowEmptyValue: false + tolerations: + description: Pod's tolerations. + items: + description: The pod with this Toleration tolerates any taint matches the using the matching operator . + properties: + effect: + description: Effect to match. Empty means all effects. + type: string + key: + description: Taint key the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists. + type: string + operator: + description: Operators are Exists or Equal. Defaults to Equal. + type: string + tolerationSeconds: + description: Period of time the toleration tolerates the taint. + format: int64 + type: integer + value: + description: If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + type: object + type: array + + status: + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: {} + conversion: + strategy: None +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosexperiments.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosExperiment + listKind: ChaosExperimentList + plural: chaosexperiments + singular: chaosexperiment + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + description: + type: object + additionalProperties: + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + status: + x-kubernetes-preserve-unknown-fields: true + type: object + spec: + type: object + properties: + definition: + x-kubernetes-preserve-unknown-fields: true + type: object + properties: + args: + type: array + items: + type: string + command: + type: array + items: + type: string + env: + type: array + items: + type: object + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previous defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + The $(VAR_NAME) syntax can be escaped with a + double $$, ie: $$(VAR_NAME). Escaped references + will never be expanded, regardless of whether + the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: + supports metadata.name, metadata.namespace, + metadata.labels, metadata.annotations, spec.nodeName, + spec.serviceAccountName, status.hostIP, + status.podIP.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, defaults + to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + image: + type: string + imagePullPolicy: + type: string + labels: + type: object + additionalProperties: + type: string + scope: + type: string + pattern: ^(Namespaced|Cluster)$ + permissions: + type: array + items: + type: object + minProperties: 3 + required: + - apiGroups + - resources + - verbs + properties: + apiGroups: + type: array + items: + type: string + resources: + type: array + items: + type: string + verbs: + type: array + items: + type: string + resourceNames: + type: array + items: + type: string + nonResourceURLs: + type: array + items: + type: string + configMaps: + type: array + items: + type: object + minProperties: 2 + properties: + name: + type: string + allowEmptyValue: false + minLength: 1 + mountPath: + type: string + allowEmptyValue: false + minLength: 1 + secrets: + type: array + items: + type: object + minProperties: 2 + properties: + name: + type: string + allowEmptyValue: false + minLength: 1 + mountPath: + type: string + allowEmptyValue: false + minLength: 1 + hostFileVolumes: + type: array + items: + type: object + minProperties: 3 + properties: + name: + type: string + allowEmptyValue: false + minLength: 1 + mountPath: + type: string + allowEmptyValue: false + minLength: 1 + nodePath: + type: string + allowEmptyValue: false + minLength: 1 + securityContext: + x-kubernetes-preserve-unknown-fields: true + type: object + hostPID: + type: boolean + + served: true + storage: true + subresources: {} + conversion: + strategy: None +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: chaosresults.litmuschaos.io +spec: + group: litmuschaos.io + names: + kind: ChaosResult + listKind: ChaosResultList + plural: chaosresults + singular: chaosresult + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + x-kubernetes-preserve-unknown-fields: true + type: object + status: + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: {} + conversion: + strategy: None \ No newline at end of file From f8bf3dfb8d9dcc5d68be0b576bde577a3c6f9acb Mon Sep 17 00:00:00 2001 From: Sayan Mondal Date: Tue, 19 Nov 2024 11:37:19 +0530 Subject: [PATCH 03/14] chore: Add adopters (#4948) Signed-off-by: Sayan Mondal --- ADOPTERS.md | 155 ++++++++++++------------- adopters/organizations/emirates-nbd.md | 13 +++ adopters/organizations/outsystems.md | 30 +++++ 3 files changed, 120 insertions(+), 78 deletions(-) create mode 100644 adopters/organizations/emirates-nbd.md create mode 100644 adopters/organizations/outsystems.md diff --git a/ADOPTERS.md b/ADOPTERS.md index 941e4f46f63..186ab8e3e60 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -1,86 +1,85 @@ -This is a list of organizations that have publicly acknowledged usage of LitmusChaos and shared details of how they are leveraging it for chaos engineering. -Please send a PR to this file (along with details in a respective [org](./adopters/organizations) folder) to add/remove entries. If you are an independent user -and wish to to share your adoption story, please raise a PR against the [users](USERS.md) file. - -These organizations have been broadly classified on the basis of how they contribute to the ecosystem: as vendors, as solution providers or as pure end-users of -cloud-native technologies. Also included in this list are CNCF (or other) open-source projects that have integrated with Litmus or use it as part of their release/delivery process. - -### Cloud-Native End Users - -The companies listed here conform to [CNCF's definition of end-users](https://github.com/cncf/enduser-public#cncf-end-user-community). - -| Organization | Usecase | Details | -| :--- | :--- | :--- | -|[AnutaNetworks](https://www.anutanetworks.com/)|Chaos Engineering as part of SRE practices in QA environments |[Our Story](adopters/organizations/anutanetworks.md)| -|[AkriData](https://www.akridata.com/)|Pod Chaos Experiments in AWS & Azure|[Our Story](adopters/organizations/akridata.md)| -|[Halodoc](https://www.halodoc.com/)|Resiliency Validation of Kubernetes Workloads and Infra on AWS |[Our Story](adopters/organizations/halodoc.md)| -|[Intuit](https://www.intuit.com?utm_source=github&utm_campaign=litmuschaos_repo)|[Argo Based Chaos Workflows](https://youtu.be/Uwqop-s99LA?t=720)|[Our Story](adopters/organizations/intuit.md)| -|[Kitopi](https://www.kitopi.com/)|Chaos Engineering as part of SRE practice|[Our Story](adopters/organizations/kitopi.md)| -|[Lenskart](https://www.lenskart.com/)|Chaos Engineering for better Resiliency | [Our Story](adopters/organizations/lenskart.md)| -|[Mercedes](https://www.mercedes-benz.com/)|Resiliency validation for applications|[Our Story](adopters/organizations/mercedes.md)| -|[Orange](https://www.orange.com)|[Cloud Infra Resiliency](https://youtu.be/UOhjFbCrncw?list=PLBuYBMjBLBzHPuPsvdbJvKu1KxSowWDYl&t=186...a)|[Our Story](adopters/organizations/orange.md)| -|[PĂ´le Emploi](https://www.pole-emploi.fr)|Chaos Engineering as part of SRE practice|[Our Story](adopters/organizations/pole_emploi.md)| -|[iFood](https://www.ifood.com.br/)|Chaos Engineering for a Food Delivery Platform|[Our Story](adopters/organizations/ifood.md)| -|[FIS](https://www.fisglobal.com/en/)|Larger SRE Transformation with Chaos Engineering|[Our Story](adopters/organizations/fis.md)| -|[Adidas](https://adidas.com/)|Implementing Chaos Engineering as a practice at Adidas|[Our Story](adopters/organizations/adidas.md)| -|[Cyren](https://www.cyren.com/)|Implementing Chaos Engineering as a practice at Cyren|[Our Story](https://www.infoq.com/articles/chaos-engineering-cloud-native/)| -|[AB-Inbev](https://www.ab-inbev.com/)|Implementing Chaos Engineering as a practice at AB-Inbev|[Our Story](adopters/organizations/abinbev.md)| -|[Group Baobab](https://baobab.com/en/home/)| Orchestrating Chaos using LitmusChaos at Baobab|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1647648343)| -|[Flipkart](https://www.flipkart.com/)|Chaos Engineering at Flipkart|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1966904935)| -|[Talend](https://www.talend.com/)|Chaos Engineering for our pipelines and weekly checks|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-2005254600)| -|[Delivery Hero](https://www.deliveryhero.com/)|Enhancing Resiliency of Our Services|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1997465958)| -|[Wingie Enuygun Company](https://www.wingie.com/)|Chaos Engineering for an Online Travel and Finance Platform|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-2331265698)| +This is a list of organizations that have publicly acknowledged usage of LitmusChaos and shared details of how they are leveraging it for chaos engineering. +Please send a PR to this file (along with details in a respective [org](./adopters/organizations) folder) to add/remove entries. If you are an independent user +and wish to to share your adoption story, please raise a PR against the [users](USERS.md) file. + +These organizations have been broadly classified on the basis of how they contribute to the ecosystem: as vendors, as solution providers or as pure end-users of +cloud-native technologies. Also included in this list are CNCF (or other) open-source projects that have integrated with Litmus or use it as part of their release/delivery process. + +### Cloud-Native End Users + +The companies listed here conform to [CNCF's definition of end-users](https://github.com/cncf/enduser-public#cncf-end-user-community). + +| Organization | Usecase | Details | +| :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | +| [AnutaNetworks](https://www.anutanetworks.com/) | Chaos Engineering as part of SRE practices in QA environments | [Our Story](adopters/organizations/anutanetworks.md) | +| [AkriData](https://www.akridata.com/) | Pod Chaos Experiments in AWS & Azure | [Our Story](adopters/organizations/akridata.md) | +| [Halodoc](https://www.halodoc.com/) | Resiliency Validation of Kubernetes Workloads and Infra on AWS | [Our Story](adopters/organizations/halodoc.md) | +| [Intuit](https://www.intuit.com?utm_source=github&utm_campaign=litmuschaos_repo) | [Argo Based Chaos Workflows](https://youtu.be/Uwqop-s99LA?t=720) | [Our Story](adopters/organizations/intuit.md) | +| [Kitopi](https://www.kitopi.com/) | Chaos Engineering as part of SRE practice | [Our Story](adopters/organizations/kitopi.md) | +| [Lenskart](https://www.lenskart.com/) | Chaos Engineering for better Resiliency | [Our Story](adopters/organizations/lenskart.md) | +| [Mercedes](https://www.mercedes-benz.com/) | Resiliency validation for applications | [Our Story](adopters/organizations/mercedes.md) | +| [Orange](https://www.orange.com) | [Cloud Infra Resiliency](https://youtu.be/UOhjFbCrncw?list=PLBuYBMjBLBzHPuPsvdbJvKu1KxSowWDYl&t=186...a) | [Our Story](adopters/organizations/orange.md) | +| [PĂ´le Emploi](https://www.pole-emploi.fr) | Chaos Engineering as part of SRE practice | [Our Story](adopters/organizations/pole_emploi.md) | +| [iFood](https://www.ifood.com.br/) | Chaos Engineering for a Food Delivery Platform | [Our Story](adopters/organizations/ifood.md) | +| [FIS](https://www.fisglobal.com/en/) | Larger SRE Transformation with Chaos Engineering | [Our Story](adopters/organizations/fis.md) | +| [Adidas](https://adidas.com/) | Implementing Chaos Engineering as a practice at Adidas | [Our Story](adopters/organizations/adidas.md) | +| [Cyren](https://www.cyren.com/) | Implementing Chaos Engineering as a practice at Cyren | [Our Story](https://www.infoq.com/articles/chaos-engineering-cloud-native/) | +| [AB-Inbev](https://www.ab-inbev.com/) | Implementing Chaos Engineering as a practice at AB-Inbev | [Our Story](adopters/organizations/abinbev.md) | +| [Group Baobab](https://baobab.com/en/home/) | Orchestrating Chaos using LitmusChaos at Baobab | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1647648343) | +| [Flipkart](https://www.flipkart.com/) | Chaos Engineering at Flipkart | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1966904935) | +| [Talend](https://www.talend.com/) | Chaos Engineering for our pipelines and weekly checks | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-2005254600) | +| [Delivery Hero](https://www.deliveryhero.com/) | Enhancing Resiliency of Our Services | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1997465958) | +| [Wingie Enuygun Company](https://www.wingie.com/) | Chaos Engineering for an Online Travel and Finance Platform | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-2331265698) | +| [EmiratesNBD](https://www.emiratesnbd.com) | Chaos Engineering for Government Owned Bank | [Our Story](adopters/organizations/outsystems.md) | ### Cloud-Native Vendors The companies listed here sell cloud-native products/technologies. They use LitmusChaos as part of the resiliency validation of these products OR as part of other -devops/reliability pipelines (such as for customer portals/websites etc.,) within the company. - -| Organization | Usecase | Details | -| :--- | :--- | :--- | -|[KubeSphere](https://kubesphere.io/)|Chaos Engineering|To Be Added| -|[Kublr](https://kublr.com/)|Identify the weak spots and components prone to failures under stress|[Our Story](adopters/organizations/kublr.md)| -|[MayaData](https://mayadata.io)|[Director Online](https://director.mayadata.io/)|[Our Story](adopters/organizations/mayadata.md)| -|[NetApp](https://www.netapp.com)|[Chaos Engineering](https://www.netapp.com/us/index.aspx)|[Our Story](adopters/organizations/netapp.md)| -|[Okteto](https://okteto.com)|[Okteto-Litmus Integration](https://okteto.com/blog/chaos-engineering-with-litmus/)| [Our Story](adopters/organizations/okteto.md)| -|[RedHat](https://www.redhat.com/en)|[RedHat Openshift Virtualization Maturity](https://www.youtube.com/watch?v=VITGHJ47gx8&list=PLBuYBMjBLBzHPuPsvdbJvKu1KxSowWDYl&index=7)|[Our Story](adopters/organizations/redhat.md)| -|[VMWare](https://www.vmware.com/)|Chaos Engineering in CD|[Our Story](adopters/organizations/vmware.md)| -|[Zebrium](https://www.zebrium.com?utm_source=github&utm_campaign=litmuschaos_repo)|[Zebrium K8s Chaos Project](https://github.com/zebrium/zebrium-kubernetes-demo)|[Our Story](adopters/organizations/zebrium.md)| -|[Container Solutions](https://www.container-solutions.com/)|Building Chaos Engineering for E-Commerce Customers|[Our Story](adopters/organizations/containersolutions.md)| -|[Infracloud Technologies](https://www.infracloud.io/)|Developing Resiliency Framework at Infracloud|[Our Story](adopters/organizations/infracloud.md)| -|[IFS](https://www.ifs.com/)|Checking Resiliency with LitmusChaos at IFS|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1966428068)| -|[Ericsson](https://www.ericsson.com/en)|Chaos Engineering with Open Source LitmusChaos|[Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1985348431)| - +devops/reliability pipelines (such as for customer portals/websites etc.,) within the company. + +| Organization | Usecase | Details | +| :--------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | +| [KubeSphere](https://kubesphere.io/) | Chaos Engineering | To Be Added | +| [Kublr](https://kublr.com/) | Identify the weak spots and components prone to failures under stress | [Our Story](adopters/organizations/kublr.md) | +| [MayaData](https://mayadata.io) | [Director Online](https://director.mayadata.io/) | [Our Story](adopters/organizations/mayadata.md) | +| [NetApp](https://www.netapp.com) | [Chaos Engineering](https://www.netapp.com/us/index.aspx) | [Our Story](adopters/organizations/netapp.md) | +| [Okteto](https://okteto.com) | [Okteto-Litmus Integration](https://okteto.com/blog/chaos-engineering-with-litmus/) | [Our Story](adopters/organizations/okteto.md) | +| [RedHat](https://www.redhat.com/en) | [RedHat Openshift Virtualization Maturity](https://www.youtube.com/watch?v=VITGHJ47gx8&list=PLBuYBMjBLBzHPuPsvdbJvKu1KxSowWDYl&index=7) | [Our Story](adopters/organizations/redhat.md) | +| [VMWare](https://www.vmware.com/) | Chaos Engineering in CD | [Our Story](adopters/organizations/vmware.md) | +| [Zebrium](https://www.zebrium.com?utm_source=github&utm_campaign=litmuschaos_repo) | [Zebrium K8s Chaos Project](https://github.com/zebrium/zebrium-kubernetes-demo) | [Our Story](adopters/organizations/zebrium.md) | +| [Container Solutions](https://www.container-solutions.com/) | Building Chaos Engineering for E-Commerce Customers | [Our Story](adopters/organizations/containersolutions.md) | +| [Infracloud Technologies](https://www.infracloud.io/) | Developing Resiliency Framework at Infracloud | [Our Story](adopters/organizations/infracloud.md) | +| [IFS](https://www.ifs.com/) | Checking Resiliency with LitmusChaos at IFS | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1966428068) | +| [Ericsson](https://www.ericsson.com/en) | Chaos Engineering with Open Source LitmusChaos | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1985348431) | +| [OutSystems](https://www.outsystems.com/) | Chaos Engineering for Low-Code Platform | [Our Story](adopters/organizations/outsystems.md) | ### Cloud-Native Solutions & Service Providers The companies listed here provide solutions around cloud-native technologies to other organizations/clients and are often involved in their implementation/offer services. -They use LitmusChaos as the tool of choice for carrying out chaos experiments in a client environment or in some cases use it as a building block of a larger bespoke software/devops platform. - -| Organization | Usecase | Details | -| :--- | :--- | :--- | -|[Klanik](https://www.klanik.com)|Chaos Engineering as part of SRE practice|[Our Story](adopters/organizations/klanik.md)| -| [Neudesic](https://www.neudesic.com/) | Chaos Engineering | [Our Story](adopters/organizations/neudesic.md) | -|[WeScale](https://www.wescale.fr)|[Chaos Engineering](https://blog.wescale.fr/2020/03/19/le-guide-de-chaos-engineering-partie-2/)|[Our Story](adopters/organizations/wescale.md)| -|[Wipro](https://www.wipro.com/en-IN/infrastructure/wipros-appanywhere/?utm_source=github&utm_campaign=litmuschaos_repo)|[Wipro AppAnywhere](https://www.wipro.com/en-IN/infrastructure/wipros-appanywhere/?utm_source=github&utm_campaign=litmuschaos_repo)|[Our Story](adopters/organizations/wipro.md)| -|[HCL Cloud Native Labs](https://www.hcltech.com/)|SRE Enablement Service|[Our Story(TBA)]| -|[CI&T](https://ciandt.com/us/en-us)|Chaos Engineering Implementation|[Our Story](adopters/organizations/ci&t.md)| - -### Cloud-Native OSS Projects - -The projects listed here, in most cases use LitmusChaos for testing the resilience of the respective opensource framework/platform -(in a manual or automated fashion) or in other cases integrate with it via a plugin/service to provide add resilience validation capability to their -existing functions. - -| Organization | Usecase | Details | -| :--- | :--- | :--- | -|[Keptn](https://keptn.sh)|[Chaos Engineering integration in CD](https://www.youtube.com/watch?v=aa5SzQmv4EQ)|[Our Story](https://medium.com/keptn/part-2-evaluating-application-resiliency-with-keptn-and-litmuschaos-use-case-and-demo-f43b264a2294)| -|[KubeFlare](https://github.com/raspbernetes)|Resilience of microservices on ARM64 (Raspberry Pi) based clusters|[Our Story](adopters/organizations/raspbernetes.md)| -|[OpenEBS](https://openebs.io/)|[Openebs-CI](https://openebs.ci/)|[Our Story](adopters/organizations/openebs.md)| -|[Pravega](https://pravega.io/)|To inject faults while exercising quality tests on our product|[Our Story](adopters/organizations/pravega.md)| -|[Red Hat](https://www.redhat.com/en)|[Chaos Engineering with Kraken](https://github.com/cloud-bulldozer/kraken)|[Our Story](adopters/organizations/redhat_kraken.md)| -|[Iter8](https://iter8.tools)|[SLO validation with chaos injection](https://iter8.tools/0.7/tutorials/deployments/slo-validation-chaos/)|To Be Added| -|[CNF Test Suite](https://github.com/cncf/cnf-testsuite)|To validate the resilience of Cloud Native Network Functions (CNFs)|[Our Story](adopters/organizations/cnftestsuite.md)| -|[APACHE APISIX](https://apisix.apache.org/)|Practicing Chaos Engineering using Litmus in the Apache APISIX Ingress.|[Our Story](adopters/organizations/apisix.md)| - - +They use LitmusChaos as the tool of choice for carrying out chaos experiments in a client environment or in some cases use it as a building block of a larger bespoke software/devops platform. + +| Organization | Usecase | Details | +| :---------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------- | +| [Klanik](https://www.klanik.com) | Chaos Engineering as part of SRE practice | [Our Story](adopters/organizations/klanik.md) | +| [Neudesic](https://www.neudesic.com/) | Chaos Engineering | [Our Story](adopters/organizations/neudesic.md) | +| [WeScale](https://www.wescale.fr) | [Chaos Engineering](https://blog.wescale.fr/2020/03/19/le-guide-de-chaos-engineering-partie-2/) | [Our Story](adopters/organizations/wescale.md) | +| [Wipro](https://www.wipro.com/en-IN/infrastructure/wipros-appanywhere/?utm_source=github&utm_campaign=litmuschaos_repo) | [Wipro AppAnywhere](https://www.wipro.com/en-IN/infrastructure/wipros-appanywhere/?utm_source=github&utm_campaign=litmuschaos_repo) | [Our Story](adopters/organizations/wipro.md) | +| [HCL Cloud Native Labs](https://www.hcltech.com/) | SRE Enablement Service | [Our Story(TBA)] | +| [CI&T](https://ciandt.com/us/en-us) | Chaos Engineering Implementation | [Our Story](adopters/organizations/ci&t.md) | + +### Cloud-Native OSS Projects + +The projects listed here, in most cases use LitmusChaos for testing the resilience of the respective opensource framework/platform +(in a manual or automated fashion) or in other cases integrate with it via a plugin/service to provide add resilience validation capability to their +existing functions. + +| Organization | Usecase | Details | +| :------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- | +| [Keptn](https://keptn.sh) | [Chaos Engineering integration in CD](https://www.youtube.com/watch?v=aa5SzQmv4EQ) | [Our Story](https://medium.com/keptn/part-2-evaluating-application-resiliency-with-keptn-and-litmuschaos-use-case-and-demo-f43b264a2294) | +| [KubeFlare](https://github.com/raspbernetes) | Resilience of microservices on ARM64 (Raspberry Pi) based clusters | [Our Story](adopters/organizations/raspbernetes.md) | +| [OpenEBS](https://openebs.io/) | [Openebs-CI](https://openebs.ci/) | [Our Story](adopters/organizations/openebs.md) | +| [Pravega](https://pravega.io/) | To inject faults while exercising quality tests on our product | [Our Story](adopters/organizations/pravega.md) | +| [Red Hat](https://www.redhat.com/en) | [Chaos Engineering with Kraken](https://github.com/cloud-bulldozer/kraken) | [Our Story](adopters/organizations/redhat_kraken.md) | +| [Iter8](https://iter8.tools) | [SLO validation with chaos injection](https://iter8.tools/0.7/tutorials/deployments/slo-validation-chaos/) | To Be Added | +| [CNF Test Suite](https://github.com/cncf/cnf-testsuite) | To validate the resilience of Cloud Native Network Functions (CNFs) | [Our Story](adopters/organizations/cnftestsuite.md) | +| [APACHE APISIX](https://apisix.apache.org/) | Practicing Chaos Engineering using Litmus in the Apache APISIX Ingress. | [Our Story](adopters/organizations/apisix.md) | diff --git a/adopters/organizations/emirates-nbd.md b/adopters/organizations/emirates-nbd.md new file mode 100644 index 00000000000..af69b14e660 --- /dev/null +++ b/adopters/organizations/emirates-nbd.md @@ -0,0 +1,13 @@ +## Emirates NBD + +[Emirates NBD](https://www.emiratesnbd.com) is Dubai's government-owned bank and is one of the largest banking groups in the Middle East in terms of assets. + +### **Why do we use Litmus.** + +Resilience is a key aspect in creating fault-tolerant environments, and leveraging tools like Litmus has been instrumental in automating resilience testing. Litmus has enabled us to simulate real-time chaos scenarios, allowing us to thoroughly verify the robustness of both our infrastructure and applications. + +### **How do we use Litmus.** + +We began with a proof of concept (POC) on a playground cluster. While we explored other tools during this process, Litmus stood out significantly, not only in its capabilities but also due to its excellent user interface. Although we faced a few challenges during the initial setup of Litmus on OpenShift, the team provided timely support, helping us overcome these obstacles and successfully complete the POC. + +Now, we've successfully deployed Litmus in a non-production cluster environment, and our SRE team is in the process of transitioning from manual chaos testing to automated chaos tests. This shift will enable us to schedule, automate, and efficiently track the outcomes of these tests, enhancing the resilience of our systems. diff --git a/adopters/organizations/outsystems.md b/adopters/organizations/outsystems.md new file mode 100644 index 00000000000..6194f8ec6c1 --- /dev/null +++ b/adopters/organizations/outsystems.md @@ -0,0 +1,30 @@ +## OutSystems + +[OutSystems](https://www.outsystems.com/) is a low-code development platform which provides tools for companies to develop, deploy and manage omnichannel enterprise applications. OutSystems was founded in 2001 in Lisbon, Portugal. In June 2018 OutSystems secured a $360M round of funding from KKR and Goldman Sachs and reached the status of Unicorn. + +### **Leveraging Litmus Chaos Engineering in Kubernetes Infrastructure:** + +We have a Kubernetes-based infrastructure pivotal to our operations, where reliability and resilience are paramount. Recognizing the need for robust testing methodologies, we turned to Litmus Chaos Engineering to fortify our systems against potential failures and to ensure seamless operations even under adverse conditions. + +### **Why do we use Litmus:** + +Litmus emerged as our tool of choice due to its comprehensive suite of chaos engineering capabilities tailored specifically for Kubernetes environments. Its versatility in orchestrating controlled chaos experiments aligns perfectly with our commitment to enhancing system reliability while maintaining agility. + +### **Use Case and Implementation:** + +We have seamlessly integrated Litmus Chaos Engineering into various stages of our development and deployment pipeline, spanning from development and testing to staging and production environments. Leveraging Litmus, we meticulously craft and execute chaos experiments, meticulously observing how our infrastructure behaves under stress, and ensuring it meets our predefined Service Level Objectives (SLOs) and Service Level Indicators (SLIs). + +### **Achievements:** + +Our journey with Litmus Chaos Engineering has been marked by significant milestones: + +- Successful deployment of Chaos Center and Litmus Delegate, empowering us with centralized chaos management capabilities. +- Establishment of secure access to Chaos Center through HTTPS, coupled with domain customization for enhanced usability. +- Implementation of WAF ACL to restrict access to Chaos Center, ensuring secure interactions. +- Integration of Azure SSO for streamlined user management and authentication. +- Seamless connectivity between Chaos Center and target nodes, facilitating efficient chaos experimentation. +- Execution of numerous successful experiments, validating the resilience and scalability of our infrastructure. + +### **Next Steps:** + +As we continue to harness the power of Litmus Chaos Engineering, we remain committed to expanding our chaos engineering initiatives, further refining our chaos experiments, and continually enhancing the resilience of our Kubernetes infrastructure. From 79cd2734ea35167e4902a65dd6468b2649e5811c Mon Sep 17 00:00:00 2001 From: Sayan Mondal Date: Tue, 19 Nov 2024 12:27:39 +0530 Subject: [PATCH 04/14] chore: Updating Emirates NBD story link (#4950) Signed-off-by: Sayan Mondal --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 186ab8e3e60..b689879fe0a 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -30,7 +30,7 @@ The companies listed here conform to [CNCF's definition of end-users](https://gi | [Talend](https://www.talend.com/) | Chaos Engineering for our pipelines and weekly checks | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-2005254600) | | [Delivery Hero](https://www.deliveryhero.com/) | Enhancing Resiliency of Our Services | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-1997465958) | | [Wingie Enuygun Company](https://www.wingie.com/) | Chaos Engineering for an Online Travel and Finance Platform | [Our Story](https://github.com/litmuschaos/litmus/issues/2191#issuecomment-2331265698) | -| [EmiratesNBD](https://www.emiratesnbd.com) | Chaos Engineering for Government Owned Bank | [Our Story](adopters/organizations/outsystems.md) | +| [EmiratesNBD](https://www.emiratesnbd.com) | Chaos Engineering for Government Owned Bank | [Our Story](adopters/organizations/emirates-nbd.md) | ### Cloud-Native Vendors From 117afbfb154a91141f85e26cc3d461fb7e3869ec Mon Sep 17 00:00:00 2001 From: Suhyen Im Date: Wed, 20 Nov 2024 13:54:01 +0900 Subject: [PATCH 05/14] feat: update recent videos (#4939) Signed-off-by: Suhyen Im --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index cb7c8d80f59..d675b10c14b 100644 --- a/README.md +++ b/README.md @@ -105,9 +105,18 @@ Fill out the [LitmusChaos Meetings invite form](https://forms.gle/xYZyZ2gTWMqz7x ### Videos +- [What if Your System Experiences an Outage? Let's Build a Resilient Systems with Chaos Engineering](https://www.youtube.com/watch?v=3mjGEh905u4&t=1s) @ [CNCF](https://www.youtube.com/@cncf) +- [Enhancing Cyber Resilience Through Zero Trust Chaos Experiments in Cloud Native Environments](https://youtu.be/BelNIk4Bkng) @ [CNCF](https://www.youtube.com/@cncf) +- [LitmusChaos, with Karthik Satchitanand](https://www.youtube.com/watch?v=ks2R57hhFZk&t=503s) @ [The Kubernetes Podcast from Google](https://www.youtube.com/@TheKubernetesPodcast) +- [Cultural Shifts: Fostering a Chaos First Mindset in Platform Engineering](https://www.youtube.com/watch?v=WUXFKxgZRsk) @ [CNCF](https://www.youtube.com/@cncf) +- [Fire in the Cloud: Bringing Managed Services Under the Ambit of Cloud-Native Chaos Engineering](https://www.youtube.com/watch?v=xCDQp5E3VUs) @ [CNCF](https://www.youtube.com/@cncf) +- [Security Controls for Safe Chaos Experimentation](https://www.youtube.com/watch?v=whCkvLKAw74) @ [CNCF](https://www.youtube.com/@cncf) +- [Chaos Engineering For Hybrid Targets With LitmusChaos](https://www.youtube.com/watch?v=BZL-ngvbpbU&t=751s) @ [CNCF](https://www.youtube.com/@cncf) - [Cloud Native Live: Litmus Chaos Engine and a microservices demo app](https://youtu.be/hOghvd9qCzI) - [Chaos Engineering hands-on - An SRE ideating Chaos Experiments and using LitmusChaos | July 2022](https://youtu.be/_x_7SiesjF0) - [Achieve Digital Product Resiliency with Chaos Engineering](https://youtu.be/PQrmBHgk0ps) +- [Case Study: Bringing Chaos Engineering to the Cloud Native Developers](https://youtu.be/KSl-oKk6TPA) @ [CNCF](https://www.youtube.com/@cncf) +- [Cloud Native Chaos Engineering with LitmusChaos](https://www.youtube.com/watch?v=ItUUqejdXr0) @ [CNCF](https://www.youtube.com/@cncf) - [How to create Chaos Experiments with Litmus | Litmus Chaos tutorial](https://youtu.be/mwu5eLgUKq4) @ [Is it Observable](https://www.youtube.com/c/IsitObservable) - [Cloud Native Chaos Engineering Preview With LitmusChaos](https://youtu.be/pMWqhS-F3tQ) - [Get started with Chaos Engineering with Litmus](https://youtu.be/5CI8d-SKBfc) @ [Containers from the Couch](https://www.youtube.com/c/ContainersfromtheCouch) From 26fa2653c26f7459ae9e85fa53d24dbb1827323c Mon Sep 17 00:00:00 2001 From: Prithvi Raj <52114109+prithvi1307@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:24:25 +0530 Subject: [PATCH 06/14] Update CODE_OF_CONDUCT.md (#4936) update with new email Signed-off-by: Prithvi Raj <52114109+prithvi1307@users.noreply.github.com> --- CODE_OF_CONDUCT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 237834f0f53..628027dcf01 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -prithvi.raj@harness.io. +sayan.mondal@harness.io. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the From 0573db7ea71aeaf021c4d205a475da9b97a3b1dc Mon Sep 17 00:00:00 2001 From: Karthik Satchitanand Date: Thu, 21 Nov 2024 16:23:43 +0530 Subject: [PATCH 07/14] (chore)maintainers: add newer maintainers for the Litmus websites (#4951) Signed-off-by: ksatchit --- MAINTAINERS.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 69c831f39a5..daa8c9e5a14 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -12,9 +12,8 @@ chaos-sdk |go/python/ansible sdk |litmus-go,litmus-python,litmu e2e |e2e-suite, e2e-dashboard |litmus-e2e |@uditgaurav, @Jonsy13 |@neelanjan00, @S-ayanide, @avaakash | integrations |CI/CD plugins, wrappers |chaos-ci-lib, gitlab-templates, github-actions |@uditgaurav, @ksatchit |@ispeakc0de, @Adarshkumar14 | helm-charts |control-plane, agent, experiments|litmus-helm |@Jasstkn, @ispeakc0de, @imrajdas, @Jonsy13 |@ksatchit, @uditgaurav | -documentation |platform-docs, experiment-docs |litmus-docs, mkdocs |@neelanjan00, @umamukkara, @ispeakc0de |@ksatchit, @ajeshbaby, @amityt, @uditgaurav | -websites |project website, chaoshub, documentation |litmus-website, charthub, litmus-docs |@umamukkara, @arkajyotiMukherjee, @S-ayanide |@SahilKr24, @hrishavjha, @ajeshbaby | - +documentation |platform-docs, experiment-docs |litmus-docs, mkdocs |@neelanjan00, @umamukkara, @ispeakc0de |@ksatchit, @ajeshbaby, @amityt, @uditgaurav |websites |project website, chaoshub, documentation |litmus-website, charthub, litmus-docs |@umamukkara, @arkajyotiMukherjee, @S-ayanide |@SahilKr24, @hrishavjha, @ajeshbaby | +websites |project website, chaoshub, documentation |litmus-website, charthub, litmus-docs |@SahilKr24, @hrishavjha, @ajeshbaby |@umamukkara, @S-ayanide | ### Consolidated Maintainers List ``` @@ -36,6 +35,9 @@ websites |project website, chaoshub, documentation |litmus-website, cha "Udit Gaurav",@uditgaurav,udit.gaurav@harness.io "Vedant Shrotria",@Jonsy13,vedant.shrotria@harness.io "Uma Mukkara",@umamukkara,umasankar.mukkara@harness.io +"Sahil KR",@SahilKr24,sahil.kumar@harness.io +"Ajesh Baby",@ajeshbaby,ajesh.baby@harness.io +"Hrishav Jha",@hrishavjha,hrishav.jha@harness.io ``` ### Consolidated Reviewers List @@ -43,9 +45,6 @@ websites |project website, chaoshub, documentation |litmus-website, cha ``` "Adarsh Kumar",@Adarshkumar14,adarsh.kumar@harness.io "Akash Srivastava",@avaakash,akash.srivastava@harness.io -"Ajesh Baby",@ajeshbaby,ajesh.baby@harness.io -"Sahil Kumar",@SahilKr24,sahil.kumar@harness.io -"Hrishav Kumar Jha",@hrishavjha,hrishav.kumar@harness.io ``` ### Emeritus Maintainers From 25ff937cba5cf5d30122cf4fad513d12916a99cd Mon Sep 17 00:00:00 2001 From: Karthik Satchitanand Date: Thu, 21 Nov 2024 17:00:11 +0530 Subject: [PATCH 08/14] (chore)roadmap: update the litmus roadmap (#4953) Signed-off-by: ksatchit --- ROADMAP.md | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 21f36b5b35d..e0e7e9f7a4c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -11,47 +11,62 @@ This document captures only the high level roadmap items. For the detailed backl - Per-experiment minimal RBAC permissions definition - Creation of 'scenarios' involving multiple faults via Argo-based Chaos Workflows (with examples for microservices apps like podtato-head and sock-shop) - Cross-Cloud Control Plane (Litmus Portal) to perform chaos against remote clusters -- Helm3 charts for LitmusChaos (control plane and experiments) +- Helm charts for LitmusChaos control plane +- Helm Chart for LitmusChaos execution Plane - Support for admin mode (centralized chaos management) as well as namespaced mode (multi-tenant clusters) - Continuous chaos via flexible schedules, with support to halt/resume or (manual/conditional) abort experiments +- Provide complete workflow termination/abort capability - Generation of observability data via Prometheus metrics and Kubernetes chaos events for experiments - Steady-State hypothesis validation before, during and after chaos injection via different probe types - Support for Docker, Containerd & CRI-O runtime - Support for scheduling policies (nodeSelector, tolerations) and resource definitions for chaos pods +- ChaosHub refactor for 2.x user flow - Support for ARM64 nodes +- Minimized role permissions for Chaos Service Accounts - Scaffolding scripts (SDK) to help bootstrap a new chaos experiment in Go, Python, Ansible - Support orchestration of non-native chaos libraries via the BYOC (Bring-Your-Own-Chaos) model - Support for OpenShift platform +- Workflow YAML linter addition - Integration tests & e2e framework creation for control plane components and chaos experiments - Documentation (usage guide for chaos operator, resources & developer guide for new experiment creation) +- Improved documentation and tutorials for Litmus Portal based execution flow - Add architecture details & design resources - Define community sync up cadence and structure ------ -### In-Progress (Under Active Development) +### In-Progress (Under Design OR Active Development) -- Support for all ChaosEngine schema elements within workflow wizard -- Workflow YAML linter addition -- Minimized role permissions for Chaos Service Accounts +- Native Chaos Workflows with redesigned subscriber to improve resource delegation, enabling seamless and efficient execution of chaos workflows within Kubernetes clusters. +- Introduce transient runners to improve resource efficiency during chaos experiments by dynamically creating and cleaning up chaos runner instances. +- Implement Kubernetes connectors to enable streamlined integration with Kubernetes clusters, providing simplified authentication and configuration management. +- Integrate with tools like K8sGPT to generate insightful reports that identify potential weaknesses in your Kubernetes environment before executing chaos experiments. +- Add Terraform support for defining and executing chaos experiments on infrastructure components, enabling infrastructure-as-code-based chaos engineering. +- Add SDK support for Python and Java, with potential extensions to other programming languages based on community interest. +- Include in-product documentation, such as tooltips, to improve user experience and ease of adoption. +- Implement the litmus-java-sdk with a targeted v1.0.0 release by Q1. +- Integrate distributed tracing by adding attributes or events to spans, and create an OpenTelemetry demo showcasing chaos engineering observability. +- Enhance the exporter to function as an OpenTelemetry collector, providing compatibility with existing observability pipelines. +- Add support for DocumentDB by replacing certain MongoDB operations, improving flexibility for database chaos. +- Upgrade Kubernetes SDK from version 1.21 to 1.26 to stay aligned with the latest Kubernetes features and enhancements. +- Refactor the chaos charts to: + - Replace latest tags with specific, versioned image tags. + - Consolidate multiple images into a single optimized image. +- Update GraphQL and authentication API documentation for improved clarity and user guidance. +- Add comprehensive unit and fuzz tests to enhance code reliability and robustness. +- Implement out-of-the-box Slack integration for better collaboration and monitoring during chaos experiments. + +------ + +### Backlog + +- Validation support for all ChaosEngine schema elements within workflow wizard - Chaos-center users account to chaosService account map -- Provide complete workflow termination/abort capability - Cross-hub experiment support within a Chaos Workflow -- Helm Chart for Chaos Execution Plane - Enhanced CRD schema for ChaosEngine to support advanced CommandProbe configuration - Support for S3 artifact sink (helps performance/benchmark runs) -- ChaosHub refactor for 2.x user flow - Chaos experiments against virtual machines and cloud infrastructure (AWS, GCP, Azure, VMWare, Baremetal) -- Improved documentation and tutorials for Litmus Portal based execution flow - Off the shelf chaos-integrated monitoring dashboards for application chaos categories - Support for user defined chaos experiment result definition - Increased fault injection types (IOChaos, HTTPChaos, JVMChaos) - Special Interest Groups (SIGs) around specific areas in the project to take the roadmap forward - ------- - -### Backlog - -- Pre-defined chaos workflows to inject chaos during application benchmark runs -- Support for cloudevents compliant chaos events -- Improved application Chaos Suites for various CNCF projects From aab8a5eb4ccf115a94b47f7e0445f584b6515e63 Mon Sep 17 00:00:00 2001 From: Suyeon Jung <103499565+suyeon-jung-dev@users.noreply.github.com> Date: Thu, 21 Nov 2024 22:50:36 +0900 Subject: [PATCH 09/14] type(docs): Update GraphQL document (support 3.11.0) (#4791) * Update graphql docs v3.9.x Signed-off-by: Suyeon Jung * Update graphql docs v3.10.x Signed-off-by: Suyeon Jung * Update graphql docs v3.11.x Signed-off-by: Suyeon Jung * Update latest GraphQL documentation url Signed-off-by: Suyeon Jung * Change graphql docs v3.9.x path to v3.9.0 Signed-off-by: Suyeon Jung * Change graphql docs v3.10.x path to v3.10.0 Signed-off-by: Suyeon Jung * Change graphql docs v3.11.x path to v3.11.0 Signed-off-by: Suyeon Jung --------- Signed-off-by: Suyeon Jung --- mkdocs/docs/experiments/api/contents.md | 2 +- mkdocs/docs/graphql/v3.10.0/api.html | 17897 +++++++++++++++ mkdocs/docs/graphql/v3.10.0/config.yml | 33 + .../custom-theme/stylesheets/custom.scss | 24 + .../graphql/v3.10.0/error_response_guide.md | 29 + .../docs/graphql/v3.10.0/images/favicon.png | Bin 0 -> 450 bytes mkdocs/docs/graphql/v3.10.0/images/logo.png | Bin 0 -> 450 bytes .../v3.10.0/javascripts/spectaql.min.js | 1 + .../v3.10.0/stylesheets/spectaql.min.css | 1 + mkdocs/docs/graphql/v3.10.x/api.html | 17877 +++++++++++++++ mkdocs/docs/graphql/v3.10.x/config.yml | 33 + .../custom-theme/stylesheets/custom.scss | 24 + .../graphql/v3.10.x/error_response_guide.md | 29 + .../docs/graphql/v3.10.x/images/favicon.png | Bin 0 -> 450 bytes mkdocs/docs/graphql/v3.10.x/images/logo.png | Bin 0 -> 450 bytes .../v3.10.x/javascripts/spectaql.min.js | 1 + .../v3.10.x/stylesheets/spectaql.min.css | 1 + mkdocs/docs/graphql/v3.11.0/api.html | 18295 +++++++++++++++ mkdocs/docs/graphql/v3.11.0/config.yml | 33 + .../custom-theme/stylesheets/custom.scss | 24 + .../graphql/v3.11.0/error_response_guide.md | 29 + .../docs/graphql/v3.11.0/images/favicon.png | Bin 0 -> 450 bytes mkdocs/docs/graphql/v3.11.0/images/logo.png | Bin 0 -> 450 bytes .../v3.11.0/javascripts/spectaql.min.js | 1 + .../v3.11.0/stylesheets/spectaql.min.css | 1 + mkdocs/docs/graphql/v3.11.x/api.html | 18310 ++++++++++++++++ mkdocs/docs/graphql/v3.11.x/config.yml | 33 + .../custom-theme/stylesheets/custom.scss | 24 + .../graphql/v3.11.x/error_response_guide.md | 29 + .../docs/graphql/v3.11.x/images/favicon.png | Bin 0 -> 450 bytes mkdocs/docs/graphql/v3.11.x/images/logo.png | Bin 0 -> 450 bytes .../v3.11.x/javascripts/spectaql.min.js | 1 + .../v3.11.x/stylesheets/spectaql.min.css | 1 + mkdocs/docs/graphql/v3.9.0/api.html | 17877 +++++++++++++++ mkdocs/docs/graphql/v3.9.0/config.yml | 33 + .../custom-theme/stylesheets/custom.scss | 24 + .../graphql/v3.9.0/error_response_guide.md | 29 + mkdocs/docs/graphql/v3.9.0/images/favicon.png | Bin 0 -> 450 bytes mkdocs/docs/graphql/v3.9.0/images/logo.png | Bin 0 -> 450 bytes .../v3.9.0/javascripts/spectaql.min.js | 1 + .../v3.9.0/stylesheets/spectaql.min.css | 1 + 41 files changed, 90697 insertions(+), 1 deletion(-) create mode 100644 mkdocs/docs/graphql/v3.10.0/api.html create mode 100644 mkdocs/docs/graphql/v3.10.0/config.yml create mode 100644 mkdocs/docs/graphql/v3.10.0/custom-theme/stylesheets/custom.scss create mode 100644 mkdocs/docs/graphql/v3.10.0/error_response_guide.md create mode 100644 mkdocs/docs/graphql/v3.10.0/images/favicon.png create mode 100644 mkdocs/docs/graphql/v3.10.0/images/logo.png create mode 100644 mkdocs/docs/graphql/v3.10.0/javascripts/spectaql.min.js create mode 100644 mkdocs/docs/graphql/v3.10.0/stylesheets/spectaql.min.css create mode 100644 mkdocs/docs/graphql/v3.10.x/api.html create mode 100644 mkdocs/docs/graphql/v3.10.x/config.yml create mode 100644 mkdocs/docs/graphql/v3.10.x/custom-theme/stylesheets/custom.scss create mode 100644 mkdocs/docs/graphql/v3.10.x/error_response_guide.md create mode 100644 mkdocs/docs/graphql/v3.10.x/images/favicon.png create mode 100644 mkdocs/docs/graphql/v3.10.x/images/logo.png create mode 100644 mkdocs/docs/graphql/v3.10.x/javascripts/spectaql.min.js create mode 100644 mkdocs/docs/graphql/v3.10.x/stylesheets/spectaql.min.css create mode 100644 mkdocs/docs/graphql/v3.11.0/api.html create mode 100644 mkdocs/docs/graphql/v3.11.0/config.yml create mode 100644 mkdocs/docs/graphql/v3.11.0/custom-theme/stylesheets/custom.scss create mode 100644 mkdocs/docs/graphql/v3.11.0/error_response_guide.md create mode 100644 mkdocs/docs/graphql/v3.11.0/images/favicon.png create mode 100644 mkdocs/docs/graphql/v3.11.0/images/logo.png create mode 100644 mkdocs/docs/graphql/v3.11.0/javascripts/spectaql.min.js create mode 100644 mkdocs/docs/graphql/v3.11.0/stylesheets/spectaql.min.css create mode 100644 mkdocs/docs/graphql/v3.11.x/api.html create mode 100644 mkdocs/docs/graphql/v3.11.x/config.yml create mode 100644 mkdocs/docs/graphql/v3.11.x/custom-theme/stylesheets/custom.scss create mode 100644 mkdocs/docs/graphql/v3.11.x/error_response_guide.md create mode 100644 mkdocs/docs/graphql/v3.11.x/images/favicon.png create mode 100644 mkdocs/docs/graphql/v3.11.x/images/logo.png create mode 100644 mkdocs/docs/graphql/v3.11.x/javascripts/spectaql.min.js create mode 100644 mkdocs/docs/graphql/v3.11.x/stylesheets/spectaql.min.css create mode 100644 mkdocs/docs/graphql/v3.9.0/api.html create mode 100644 mkdocs/docs/graphql/v3.9.0/config.yml create mode 100644 mkdocs/docs/graphql/v3.9.0/custom-theme/stylesheets/custom.scss create mode 100644 mkdocs/docs/graphql/v3.9.0/error_response_guide.md create mode 100644 mkdocs/docs/graphql/v3.9.0/images/favicon.png create mode 100644 mkdocs/docs/graphql/v3.9.0/images/logo.png create mode 100644 mkdocs/docs/graphql/v3.9.0/javascripts/spectaql.min.js create mode 100644 mkdocs/docs/graphql/v3.9.0/stylesheets/spectaql.min.css diff --git a/mkdocs/docs/experiments/api/contents.md b/mkdocs/docs/experiments/api/contents.md index c06cec65207..112c4c96d9a 100644 --- a/mkdocs/docs/experiments/api/contents.md +++ b/mkdocs/docs/experiments/api/contents.md @@ -14,6 +14,6 @@ GraphQL Server Contains GraphQL Server API documentation -GraphQL Server +GraphQL Server \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.0/api.html b/mkdocs/docs/graphql/v3.10.0/api.html new file mode 100644 index 00000000000..e4054f55455 --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.0/api.html @@ -0,0 +1,17897 @@ + + + + + + + ChaosCenter API Documentation + + + + +
+ +
+
+ +
+
+

ChaosCenter API Documentation

+
+
+
+

Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform.

+
+
+
+
API Endpoints
+
# Dev:
+http://localhost:8080
+# Prod:
+http://localhost:8080/query
+
+
+
+
+
+

Common Error Response

+
+
+

All error responses follow the structure outlined below.

+
{
+  "errors": [
+    {
+      "message": "Error message",
+      "path": [
+        "Request path"
+      ]
+    }
+  ],
+  "data": {}
+}
+
+

Field Descriptions:

+
    +
  • errors:
    An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
    + Type: Array

    +
      +
    • message:
      A description of the error.
      + Type: String

      +
    • +
    • path:
      Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
      + Type: Array of Strings

      +
    • +
    +
  • +
  • data:
    This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
    + Type: Object
    +
  • +
+
+
+
+
+
+
+

Queries

+
+

+ getChaosFault +

+
+
+
+
Description
+

Get the fault list from a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a FaultDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosFault(
+  $projectID: ID!,
+  $request: ExperimentRequest!
+) {
+  getChaosFault(
+    projectID: $projectID,
+    request: $request
+  ) {
+    fault
+    engine
+    csv
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ExperimentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosFault": {
+      "fault": "abc123",
+      "engine": "abc123",
+      "csv": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHub +

+
+
+
+
Description
+

Get the details of a requested ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHubStatus! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ chaosHubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHub(
+  $projectID: ID!,
+  $chaosHubID: ID!
+) {
+  getChaosHub(
+    projectID: $projectID,
+    chaosHubID: $chaosHubID
+  ) {
+    id
+    repoURL
+    repoBranch
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "chaosHubID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "isAvailable": false,
+      "totalFaults": "abc123",
+      "totalExperiments": "xyz789",
+      "name": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "abc123",
+      "isRemoved": false,
+      "sshPrivateKey": "xyz789",
+      "sshPublicKey": "abc123",
+      "lastSyncedAt": "xyz789",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "createdAt": "xyz789",
+      "updatedAt": "xyz789",
+      "description": "xyz789",
+      "isDefault": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHubStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetChaosHubStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHubStats($projectID: ID!) {
+  getChaosHubStats(projectID: $projectID) {
+    totalChaosHubs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"getChaosHubStats": {"totalChaosHubs": 123}}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  getEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "environmentID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getEnvironment": {
+      "projectID": "xyz789",
+      "environmentID": "xyz789",
+      "name": "abc123",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "abc123",
+      "isRemoved": false,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperiment +

+
+
+
+
Description
+

Returns the experiment based on experiment ID

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperiment(
+  $projectID: ID!,
+  $experimentID: String!
+) {
+  getExperiment(
+    projectID: $projectID,
+    experimentID: $experimentID
+  ) {
+    experimentDetails {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+    averageResiliencyScore
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperiment": {
+      "experimentDetails": Experiment,
+      "averageResiliencyScore": 123.45
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRun +

+
+
+
+
Description
+

Returns experiment run based on experiment run ID

+
+
+
+
+
+
+
Response
+

Returns an ExperimentRun! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - ID + +
+ notifyID - ID + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: ID,
+  $notifyID: ID
+) {
+  getExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  ) {
+    projectID
+    experimentRunID
+    experimentType
+    experimentID
+    weightages {
+      faultName
+      weightage
+    }
+    updatedAt
+    createdAt
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+    experimentName
+    experimentManifest
+    phase
+    resiliencyScore
+    faultsPassed
+    faultsFailed
+    faultsAwaited
+    faultsStopped
+    faultsNa
+    totalFaults
+    executionData
+    isRemoved
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+    notifyID
+    runSequence
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "4",
+  "notifyID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRun": {
+      "projectID": "4",
+      "experimentRunID": "4",
+      "experimentType": "abc123",
+      "experimentID": 4,
+      "weightages": [Weightages],
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "infra": Infra,
+      "experimentName": "xyz789",
+      "experimentManifest": "xyz789",
+      "phase": "All",
+      "resiliencyScore": 123.45,
+      "faultsPassed": 987,
+      "faultsFailed": 123,
+      "faultsAwaited": 123,
+      "faultsStopped": 987,
+      "faultsNa": 987,
+      "totalFaults": 123,
+      "executionData": "xyz789",
+      "isRemoved": true,
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails,
+      "notifyID": "4",
+      "runSequence": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRunStats +

+
+
+
+
Description
+

Query to get experiment run stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentRunStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRunStats($projectID: ID!) {
+  getExperimentRunStats(projectID: $projectID) {
+    totalExperimentRuns
+    totalCompletedExperimentRuns
+    totalTerminatedExperimentRuns
+    totalRunningExperimentRuns
+    totalStoppedExperimentRuns
+    totalErroredExperimentRuns
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRunStats": {
+      "totalExperimentRuns": 987,
+      "totalCompletedExperimentRuns": 987,
+      "totalTerminatedExperimentRuns": 123,
+      "totalRunningExperimentRuns": 123,
+      "totalStoppedExperimentRuns": 123,
+      "totalErroredExperimentRuns": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentStats($projectID: ID!) {
+  getExperimentStats(projectID: $projectID) {
+    totalExperiments
+    totalExpCategorizedByResiliencyScore {
+      id
+      count
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentStats": {
+      "totalExperiments": 987,
+      "totalExpCategorizedByResiliencyScore": [
+        ResilienceScoreCategory
+      ]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getGitOpsDetails +

+
+
+
+
Description
+

Returns the git configuration for gitops

+
+
+
+
+
+
+
Response
+

Returns a GitConfigResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetGitOpsDetails($projectID: ID!) {
+  getGitOpsDetails(projectID: $projectID) {
+    enabled
+    projectID
+    branch
+    repoURL
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getGitOpsDetails": {
+      "enabled": false,
+      "projectID": "abc123",
+      "branch": "abc123",
+      "repoURL": "xyz789",
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "xyz789",
+      "password": "abc123",
+      "sshPrivateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getImageRegistry +

+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetImageRegistry($projectID: String!) {
+  getImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "abc123",
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfra +

+
+
+
+
Description
+

Returns infra with a particular infraID in the project

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  getInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "infraID": "xyz789"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfra": {
+      "projectID": 4,
+      "infraID": "4",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "environmentID": "abc123",
+      "platformName": "abc123",
+      "isActive": false,
+      "isInfraConfirmed": true,
+      "isRemoved": true,
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 123,
+      "token": "xyz789",
+      "infraNamespace": "xyz789",
+      "serviceAccount": "abc123",
+      "infraScope": "xyz789",
+      "infraNsExists": true,
+      "infraSaExists": false,
+      "lastExperimentTimestamp": "abc123",
+      "startTime": "abc123",
+      "version": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraDetails +

+
+
+
+
Description
+

Returns infra details based on identifiers

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraDetails(
+  $infraID: ID!,
+  $projectID: ID!
+) {
+  getInfraDetails(
+    infraID: $infraID,
+    projectID: $projectID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "infraID": "4",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraDetails": {
+      "projectID": "4",
+      "infraID": "4",
+      "name": "abc123",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "environmentID": "xyz789",
+      "platformName": "xyz789",
+      "isActive": true,
+      "isInfraConfirmed": false,
+      "isRemoved": false,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "noOfExperiments": 987,
+      "noOfExperimentRuns": 123,
+      "token": "xyz789",
+      "infraNamespace": "abc123",
+      "serviceAccount": "abc123",
+      "infraScope": "xyz789",
+      "infraNsExists": false,
+      "infraSaExists": false,
+      "lastExperimentTimestamp": "xyz789",
+      "startTime": "xyz789",
+      "version": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraManifest +

+
+
+
+
Description
+

Returns the manifest for a given infraID

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ upgrade - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraManifest(
+  $infraID: ID!,
+  $upgrade: Boolean!,
+  $projectID: ID!
+) {
+  getInfraManifest(
+    infraID: $infraID,
+    upgrade: $upgrade,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "infraID": "4",
+  "upgrade": true,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"getInfraManifest": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetInfraStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraStats($projectID: ID!) {
+  getInfraStats(projectID: $projectID) {
+    totalInfrastructures
+    totalActiveInfrastructure
+    totalInactiveInfrastructures
+    totalConfirmedInfrastructure
+    totalNonConfirmedInfrastructures
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraStats": {
+      "totalInfrastructures": 987,
+      "totalActiveInfrastructure": 987,
+      "totalInactiveInfrastructures": 987,
+      "totalConfirmedInfrastructure": 987,
+      "totalNonConfirmedInfrastructures": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getPredefinedExperiment +

+
+
+
+
Description
+

Returns predefined experiment details of selected experiments

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ experimentName - [String!]! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetPredefinedExperiment(
+  $hubID: ID!,
+  $experimentName: [String!]!,
+  $projectID: ID!
+) {
+  getPredefinedExperiment(
+    hubID: $hubID,
+    experimentName: $experimentName,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "hubID": "4",
+  "experimentName": ["xyz789"],
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPredefinedExperiment": [
+      {
+        "experimentName": "xyz789",
+        "experimentCSV": "abc123",
+        "experimentManifest": "abc123"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbe +

+
+
+
+
Description
+

Returns a single Probe based on ProbeName and various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "probeName": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbe": {
+      "projectID": 4,
+      "name": "abc123",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 123,
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeReference +

+
+
+
+
Description
+

Returns all the reference of the Probe based on ProbeName

+
+
+
+
+
+
+
Response
+

Returns a GetProbeReferenceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeReference(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbeReference(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    totalRuns
+    recentExecutions {
+      faultName
+      mode
+      executionHistory {
+        ...ExecutionHistoryFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "probeName": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbeReference": {
+      "projectID": 4,
+      "name": "xyz789",
+      "totalRuns": 123,
+      "recentExecutions": [RecentExecutions]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeYAML +

+
+
+
+
Description
+

Returns the Probe YAML based on ProbeName which can be used in ChaosEngine manifest

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - GetProbeYAMLRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeYAML(
+  $projectID: ID!,
+  $request: GetProbeYAMLRequest!
+) {
+  getProbeYAML(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": GetProbeYAMLRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"getProbeYAML": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbesInExperimentRun +

+
+
+
+
Description
+

Returns all the Probes attached to the requested Experiment Run

+
+
+
+
+
+
+
Response
+

Returns [GetProbesInExperimentRunResponse]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - String! + +
+ faultName - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbesInExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: String!,
+  $faultName: String!
+) {
+  getProbesInExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    faultName: $faultName
+  ) {
+    probe {
+      projectID
+      name
+      description
+      tags
+      type
+      infrastructureType
+      kubernetesHTTPProperties {
+        ...KubernetesHTTPProbeFragment
+      }
+      kubernetesCMDProperties {
+        ...KubernetesCMDProbeFragment
+      }
+      k8sProperties {
+        ...K8SProbeFragment
+      }
+      promProperties {
+        ...PROMProbeFragment
+      }
+      recentExecutions {
+        ...ProbeRecentExecutionsFragment
+      }
+      referencedBy
+      updatedAt
+      createdAt
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+    }
+    mode
+    status {
+      verdict
+      description
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "abc123",
+  "faultName": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbesInExperimentRun": [
+      {
+        "probe": Probe,
+        "mode": "SOT",
+        "status": Status
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getServerVersion +

+
+
+
+
Description
+

Returns version of gql server

+
+
+
+
+
+
+
Response
+

Returns a ServerVersionResponse! +

+
+
+
+

Example

+
+
Query
+ + +
query GetServerVersion {
+  getServerVersion {
+    key
+    value
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getServerVersion": {
+      "key": "abc123",
+      "value": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getVersionDetails +

+
+
+
+
Description
+

Query to get the latest version of infra available

+
+
+
+
+
+
+
Response
+

Returns an InfraVersionDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetVersionDetails($projectID: ID!) {
+  getVersionDetails(projectID: $projectID) {
+    latestVersion
+    compatibleVersions
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getVersionDetails": {
+      "latestVersion": "abc123",
+      "compatibleVersions": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosFaults +

+
+
+
+
Description
+

List the Charts details of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [Chart!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosFaults(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listChaosFaults(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    apiVersion
+    kind
+    metadata {
+      name
+      version
+      annotations {
+        ...AnnotationFragment
+      }
+    }
+    spec {
+      displayName
+      categoryDescription
+      keywords
+      maturity
+      maintainers {
+        ...MaintainerFragment
+      }
+      minKubeVersion
+      provider {
+        ...ProviderFragment
+      }
+      links {
+        ...LinkFragment
+      }
+      faults {
+        ...FaultListFragment
+      }
+      experiments
+      chaosExpCRDLink
+      platforms
+      chaosType
+    }
+    packageInfo {
+      packageName
+      experiments {
+        ...ExperimentsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "hubID": "4",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosFaults": [
+      {
+        "apiVersion": "abc123",
+        "kind": "abc123",
+        "metadata": Metadata,
+        "spec": Spec,
+        "packageInfo": PackageInformation
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosHub +

+
+
+
+
Description
+

Lists all the connected ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [ChaosHubStatus]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListChaosHubRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosHub(
+  $projectID: ID!,
+  $request: ListChaosHubRequest
+) {
+  listChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosHub": [
+      {
+        "id": "4",
+        "repoURL": "abc123",
+        "repoBranch": "abc123",
+        "isAvailable": true,
+        "totalFaults": "xyz789",
+        "totalExperiments": "xyz789",
+        "name": "xyz789",
+        "hubType": "GIT",
+        "isPrivate": true,
+        "authType": "BASIC",
+        "token": "xyz789",
+        "userName": "xyz789",
+        "password": "xyz789",
+        "isRemoved": false,
+        "sshPrivateKey": "abc123",
+        "sshPublicKey": "abc123",
+        "lastSyncedAt": "abc123",
+        "tags": ["abc123"],
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "createdAt": "xyz789",
+        "updatedAt": "xyz789",
+        "description": "abc123",
+        "isDefault": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listEnvironments +

+
+
+
+
Response
+

Returns a ListEnvironmentResponse +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListEnvironments(
+  $projectID: ID!,
+  $request: ListEnvironmentRequest
+) {
+  listEnvironments(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfEnvironments
+    environments {
+      projectID
+      environmentID
+      name
+      description
+      tags
+      type
+      createdAt
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      updatedAt
+      isRemoved
+      infraIDs
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listEnvironments": {
+      "totalNoOfEnvironments": 123,
+      "environments": [Environment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperiment +

+
+
+
+
Description
+

Returns the list of experiments based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperiment(
+  $projectID: ID!,
+  $request: ListExperimentRequest!
+) {
+  listExperiment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperiments
+    experiments {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperiment": {
+      "totalNoOfExperiments": 987,
+      "experiments": [Experiment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperimentRun +

+
+
+
+
Description
+

Returns the list of experiment run based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentRunResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperimentRun(
+  $projectID: ID!,
+  $request: ListExperimentRunRequest!
+) {
+  listExperimentRun(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperimentRuns
+    experimentRuns {
+      projectID
+      experimentRunID
+      experimentType
+      experimentID
+      weightages {
+        ...WeightagesFragment
+      }
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      experimentName
+      experimentManifest
+      phase
+      resiliencyScore
+      faultsPassed
+      faultsFailed
+      faultsAwaited
+      faultsStopped
+      faultsNa
+      totalFaults
+      executionData
+      isRemoved
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+      notifyID
+      runSequence
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRunRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperimentRun": {
+      "totalNoOfExperimentRuns": 987,
+      "experimentRuns": [ExperimentRun]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listImageRegistry +

+
+
+
+
Response
+

Returns [ImageRegistryResponse!] +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListImageRegistry($projectID: String!) {
+  listImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listImageRegistry": [
+      {
+        "isDefault": false,
+        "imageRegistryInfo": ImageRegistry,
+        "imageRegistryID": "xyz789",
+        "projectID": "xyz789",
+        "updatedAt": "abc123",
+        "createdAt": "abc123",
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "isRemoved": true
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listInfras +

+
+
+
+
Description
+

Returns infras with a particular infra type in the project

+
+
+
+
+
+
+
Response
+

Returns a ListInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListInfraRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListInfras(
+  $projectID: ID!,
+  $request: ListInfraRequest
+) {
+  listInfras(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfInfras
+    infras {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listInfras": {
+      "totalNoOfInfras": 123,
+      "infras": [Infra]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listPredefinedExperiments +

+
+
+
+
Description
+

List the PredefinedExperiments present in the hub

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListPredefinedExperiments(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listPredefinedExperiments(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listPredefinedExperiments": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "abc123",
+        "experimentManifest": "xyz789"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listProbes +

+
+
+
+
Description
+

Returns the list of Probes based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns [Probe]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infrastructureType - InfrastructureType + +
+ probeNames - [ID!] + +
+ filter - ProbeFilterInput + +
+
+
+
+

Example

+
+
Query
+ + +
query ListProbes(
+  $projectID: ID!,
+  $infrastructureType: InfrastructureType,
+  $probeNames: [ID!],
+  $filter: ProbeFilterInput
+) {
+  listProbes(
+    projectID: $projectID,
+    infrastructureType: $infrastructureType,
+    probeNames: $probeNames,
+    filter: $filter
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": 4,
+  "infrastructureType": "Kubernetes",
+  "probeNames": [4],
+  "filter": ProbeFilterInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listProbes": [
+      {
+        "projectID": 4,
+        "name": "xyz789",
+        "description": "xyz789",
+        "tags": ["abc123"],
+        "type": "httpProbe",
+        "infrastructureType": "Kubernetes",
+        "kubernetesHTTPProperties": KubernetesHTTPProbe,
+        "kubernetesCMDProperties": KubernetesCMDProbe,
+        "k8sProperties": K8SProbe,
+        "promProperties": PROMProbe,
+        "recentExecutions": [ProbeRecentExecutions],
+        "referencedBy": 987,
+        "updatedAt": "xyz789",
+        "createdAt": "xyz789",
+        "updatedBy": UserDetails,
+        "createdBy": UserDetails
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ validateUniqueProbe +

+
+
+
+
Description
+

Validates if a probe is already present, returns true if unique

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ValidateUniqueProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  validateUniqueProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "probeName": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"validateUniqueProbe": true}}
+
+ + +
+
+
+
+

Mutations

+
+

+ addChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (includes the git clone operation)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  addChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "projectID": 4,
+      "isDefault": true,
+      "name": "xyz789",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "abc123",
+      "isRemoved": true,
+      "createdAt": "xyz789",
+      "updatedAt": "xyz789",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addProbe +

+
+
+
+
Description
+

Creates a new Probe

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  addProbe(
+    request: $request,
+    projectID: $projectID
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ProbeRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addProbe": {
+      "projectID": "4",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["xyz789"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 123,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addRemoteChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (remote hub download)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateRemoteChaosHub! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddRemoteChaosHub(
+  $projectID: ID!,
+  $request: CreateRemoteChaosHub!
+) {
+  addRemoteChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateRemoteChaosHub}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addRemoteChaosHub": {
+      "id": 4,
+      "repoURL": "abc123",
+      "repoBranch": "abc123",
+      "projectID": 4,
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "xyz789",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": true,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ chaosExperimentRun +

+
+
+
+
Description
+

Creates a new experiment run and sends it to subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - ExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ChaosExperimentRun($request: ExperimentRunRequest!) {
+  chaosExperimentRun(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": ExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"chaosExperimentRun": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ confirmInfraRegistration +

+
+
+
+
Description
+

Confirms the subscriber's registration with the control plane

+
+
+
+
+
+
+
Response
+

Returns a ConfirmInfraRegistrationResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ConfirmInfraRegistration($request: InfraIdentity!) {
+  confirmInfraRegistration(request: $request) {
+    isInfraConfirmed
+    newAccessKey
+    infraID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "confirmInfraRegistration": {
+      "isInfraConfirmed": true,
+      "newAccessKey": "xyz789",
+      "infraID": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createChaosExperiment +

+
+
+
+
Description
+

Creates a new experiment and applies its manifest

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  createChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": "4",
+      "cronSyntax": "xyz789",
+      "experimentName": "abc123",
+      "experimentDescription": "abc123",
+      "isCustomExperiment": false,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateEnvironment(
+  $projectID: ID!,
+  $request: CreateEnvironmentRequest
+) {
+  createEnvironment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createEnvironment": {
+      "projectID": "xyz789",
+      "environmentID": "xyz789",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "xyz789",
+      "isRemoved": false,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createImageRegistry +

+
+
+
+
Description
+

Create an Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateImageRegistry(
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  createImageRegistry(
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "abc123",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createImageRegistry": {
+      "isDefault": true,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "xyz789",
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosExperiment +

+
+
+
+
Description
+

Removes a experiment from infra

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ experimentRunID - String + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosExperiment(
+  $experimentID: String!,
+  $experimentRunID: String,
+  $projectID: ID!
+) {
+  deleteChaosExperiment(
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "abc123",
+  "experimentRunID": "xyz789",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosExperiment": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosHub +

+
+
+
+
Description
+

Delete the ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ hubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosHub(
+  $projectID: ID!,
+  $hubID: ID!
+) {
+  deleteChaosHub(
+    projectID: $projectID,
+    hubID: $hubID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "hubID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosHub": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  deleteEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "environmentID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteEnvironment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteImageRegistry +

+
+
+
+
Description
+

Delete the Image Registry

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!
+) {
+  deleteImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteImageRegistry": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteInfra +

+
+
+
+
Description
+

Disconnects an infra and deletes its configuration from the control plane

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  deleteInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteInfra": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteProbe +

+
+
+
+
Description
+

Delete a Probe

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ probeName - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteProbe(
+  $probeName: ID!,
+  $projectID: ID!
+) {
+  deleteProbe(
+    probeName: $probeName,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "probeName": "4",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteProbe": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ disableGitOps +

+
+
+
+
Description
+

Disables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DisableGitOps($projectID: ID!) {
+  disableGitOps(projectID: $projectID)
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"disableGitOps": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ enableGitOps +

+
+
+
+
Description
+

Enables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation EnableGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  enableGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"enableGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ generateSSHKey +

+
+
+
+
Description
+

Generates Private and Public key for SSH authentication

+
+
+
+
+
+
+
Response
+

Returns an SSHKey! +

+
+
+
+

Example

+
+
Query
+ + +
mutation GenerateSSHKey {
+  generateSSHKey {
+    publicKey
+    privateKey
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "generateSSHKey": {
+      "publicKey": "xyz789",
+      "privateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ getManifestWithInfraID +

+
+
+
+
Description
+

Fetches manifest details

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+ accessKey - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GetManifestWithInfraID(
+  $projectID: ID!,
+  $infraID: String!,
+  $accessKey: String!
+) {
+  getManifestWithInfraID(
+    projectID: $projectID,
+    infraID: $infraID,
+    accessKey: $accessKey
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "xyz789",
+  "accessKey": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getManifestWithInfraID": "xyz789"
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ gitopsNotifier +

+
+
+
+
Description
+

Sends workflow run request(single run workflow only) to agent on gitops notification

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ clusterInfo - InfraIdentity! + +
+ experimentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GitopsNotifier(
+  $clusterInfo: InfraIdentity!,
+  $experimentID: ID!
+) {
+  gitopsNotifier(
+    clusterInfo: $clusterInfo,
+    experimentID: $experimentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"clusterInfo": InfraIdentity, "experimentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"gitopsNotifier": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeObj +

+
+
+
+
Description
+

Receives kubernetes object data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeObj($request: KubeObjectData!) {
+  kubeObj(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeObj": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ podLog +

+
+
+
+
Description
+

Receives pod logs for experiments from infra

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLog! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation PodLog($request: PodLog!) {
+  podLog(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLog}
+
+ + +
+
+
Response
+ + +
{"data": {"podLog": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ registerInfra +

+
+
+
+
Description
+

Connect a new infra for a user in a specified project

+
+
+
+
+
+
+
Response
+

Returns a RegisterInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - RegisterInfraRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RegisterInfra(
+  $projectID: ID!,
+  $request: RegisterInfraRequest!
+) {
+  registerInfra(
+    projectID: $projectID,
+    request: $request
+  ) {
+    token
+    infraID
+    name
+    manifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": RegisterInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "registerInfra": {
+      "token": "abc123",
+      "infraID": "xyz789",
+      "name": "abc123",
+      "manifest": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ runChaosExperiment +

+
+
+
+
Description
+

Run the chaos experiment (used by frontend)

+
+
+
+
+
+
+
Response
+

Returns a RunChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RunChaosExperiment(
+  $experimentID: String!,
+  $projectID: ID!
+) {
+  runChaosExperiment(
+    experimentID: $experimentID,
+    projectID: $projectID
+  ) {
+    notifyID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "abc123",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"runChaosExperiment": {"notifyID": 4}}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosExperiment +

+
+
+
+
Description
+

Saves a new experiment or updates if already exists

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - SaveChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosExperiment(
+  $request: SaveChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  saveChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": SaveChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"saveChaosExperiment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosHub +

+
+
+
+
Description
+

Save a ChaosHub configuration without cloning it

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  saveChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "saveChaosHub": {
+      "id": "4",
+      "repoURL": "abc123",
+      "repoBranch": "xyz789",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "xyz789",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ stopExperimentRuns +

+
+
+
+
Description
+

stopExperiment will halt all the ongoing runs of a particular experiment

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+ experimentRunID - String + +
+ notifyID - String + +
+
+
+
+

Example

+
+
Query
+ + +
mutation StopExperimentRuns(
+  $projectID: ID!,
+  $experimentID: String!,
+  $experimentRunID: String,
+  $notifyID: String
+) {
+  stopExperimentRuns(
+    projectID: $projectID,
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "abc123",
+  "experimentRunID": "abc123",
+  "notifyID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"stopExperimentRuns": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ syncChaosHub +

+
+
+
+
Description
+

Sync changes from the Git repository of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ id - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SyncChaosHub(
+  $id: ID!,
+  $projectID: ID!
+) {
+  syncChaosHub(
+    id: $id,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"id": "4", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"syncChaosHub": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosExperiment +

+
+
+
+
Description
+

Updates the experiment

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  updateChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": 4,
+      "cronSyntax": "abc123",
+      "experimentName": "abc123",
+      "experimentDescription": "xyz789",
+      "isCustomExperiment": true,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosHub +

+
+
+
+
Description
+

Update the configuration of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosHub(
+  $projectID: ID!,
+  $request: UpdateChaosHubRequest!
+) {
+  updateChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": UpdateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateCronExperimentState +

+
+
+
+
Description
+

Enable/Disable cron experiment state

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ disable - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateCronExperimentState(
+  $experimentID: String!,
+  $disable: Boolean!,
+  $projectID: ID!
+) {
+  updateCronExperimentState(
+    experimentID: $experimentID,
+    disable: $disable,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "abc123",
+  "disable": false,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateCronExperimentState": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateEnvironment(
+  $projectID: ID!,
+  $request: UpdateEnvironmentRequest
+) {
+  updateEnvironment(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": UpdateEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateEnvironment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateGitOps +

+
+
+
+
Description
+

Updates gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  updateGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "configurations": GitConfig
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateImageRegistry +

+
+
+
+
Description
+

Update the Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  updateImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "abc123",
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateProbe +

+
+
+
+
Description
+

Update the configuration of a Probe

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  updateProbe(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ProbeRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateProbe": "xyz789"}}
+
+ + +
+
+
+
+

Subscriptions

+
+

+ getInfraEvents +

+
+
+
+
Description
+

Listens infra events from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraEventResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetInfraEvents($projectID: String!) {
+  getInfraEvents(projectID: $projectID) {
+    eventID
+    eventType
+    eventName
+    description
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "xyz789"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraEvents": {
+      "eventID": "4",
+      "eventType": "abc123",
+      "eventName": "xyz789",
+      "description": "xyz789",
+      "infra": Infra
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeObject +

+
+
+
+
Description
+

Returns a kubernetes object given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeObjectResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeObject($request: KubeObjectRequest!) {
+  getKubeObject(request: $request) {
+    infraID
+    kubeObj {
+      namespace
+      data {
+        ...ObjectDataFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeObject": {
+      "infraID": "4",
+      "kubeObj": [KubeObject]
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getPodLog +

+
+
+
+
Description
+

Returns experiment logs from the pods

+
+
+
+
+
+
+
Response
+

Returns a PodLogResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLogRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetPodLog($request: PodLogRequest!) {
+  getPodLog(request: $request) {
+    experimentRunID
+    podName
+    podType
+    log
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLogRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPodLog": {
+      "experimentRunID": "4",
+      "podName": "xyz789",
+      "podType": "xyz789",
+      "log": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ infraConnect +

+
+
+
+
Description
+

Listens infra operation request from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraActionResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription InfraConnect($request: InfraIdentity!) {
+  infraConnect(request: $request) {
+    projectID
+    action {
+      requestID
+      requestType
+      k8sManifest
+      namespace
+      externalData
+      username
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "infraConnect": {
+      "projectID": "abc123",
+      "action": ActionPayload
+    }
+  }
+}
+
+ + +
+
+
+
+

Types

+
+

ActionPayload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
requestID - String! + +
requestType - String! + +
k8sManifest - String! + +
namespace - String! + +
externalData - String + +
username - String + +
+
+
+
+
+
Example
+ + +
{
+  "requestID": "abc123",
+  "requestType": "xyz789",
+  "k8sManifest": "xyz789",
+  "namespace": "xyz789",
+  "externalData": "abc123",
+  "username": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Annotation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
categories - String! + +
vendor - String! + +
createdAt - String! + +
repository - String! + +
support - String! + +
chartDescription - String! + +
+
+
+
+
+
Example
+ + +
{
+  "categories": "abc123",
+  "vendor": "abc123",
+  "createdAt": "xyz789",
+  "repository": "xyz789",
+  "support": "xyz789",
+  "chartDescription": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Audit

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
updatedAt - String + +
createdAt - String + +
updatedBy - UserDetails + +
createdBy - UserDetails + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Audit Types
+

ExperimentRun

+
+

RecentExperimentRun

+
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

ImageRegistryResponse

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

AuthType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

BASIC

+
+
+

NONE

+
+
+

SSH

+
+
+

TOKEN

+
+
+
+
+
+
+
Example
+ + +
"BASIC"
+
+ + +
+
+
+
+
+
+ Types +
+

Boolean

+
+
+
+
Description
+

The Boolean scalar type represents true or false.

+
+
+
+
+
Example
+ + +
true
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String + ID of the experiment
+ runExperiment - Boolean + Boolean check indicating if the created scenario will be executed or not
+ experimentManifest - String! + Manifest of the experiment
+ experimentType - ExperimentType + Type of the experiment
+ cronSyntax - String! + Cron syntax of the experiment schedule
+ experimentName - String! + Name of the experiment
+ experimentDescription - String! + Description of the experiment
+ weightages - [WeightagesInput!]! + Array containing weightage and name of each chaos experiment in the experiment
+ isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
+ infraID - ID! + ID of the target infra in which the experiment will run
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "runExperiment": true,
+  "experimentManifest": "xyz789",
+  "experimentType": "All",
+  "cronSyntax": "xyz789",
+  "experimentName": "xyz789",
+  "experimentDescription": "abc123",
+  "weightages": [WeightagesInput],
+  "isCustomExperiment": false,
+  "infraID": "4",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentResponse

+
+
+
+
Description
+

Defines the response received for querying the details of chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + ID of the experiment
projectID - ID! + +
cronSyntax - String! + Cron syntax of the experiment schedule
experimentName - String! + Name of the experiment
experimentDescription - String! + Description of the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "projectID": 4,
+  "cronSyntax": "xyz789",
+  "experimentName": "abc123",
+  "experimentDescription": "xyz789",
+  "isCustomExperiment": false,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the chaos hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
projectID - ID! + ID of the project in which the chaos hub is present
isDefault - Boolean! + Default Hub Identifier
name - String! + Name of the chaos hub
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
description - String + Description of ChaosHub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
isRemoved - Boolean! + Bool value indicating if the chaos hub is removed
createdAt - String! + Timestamp when the chaos hub was created
updatedAt - String! + Timestamp when the chaos hub was last updated
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "abc123",
+  "repoBranch": "xyz789",
+  "projectID": "4",
+  "isDefault": true,
+  "name": "abc123",
+  "tags": ["abc123"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "description": "abc123",
+  "hubType": "GIT",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789",
+  "isRemoved": true,
+  "createdAt": "xyz789",
+  "updatedAt": "abc123",
+  "lastSyncedAt": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubFilterInput

+
+
+
+
Description
+

Defines filter options for ChaosHub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubName - String + Name of the ChaosHub
+ tags - [String!] + Tags of a chaos hub
+ description - String + Description of a chaos hub
+
+
+
+
+
Example
+ + +
{
+  "chaosHubName": "abc123",
+  "tags": ["abc123"],
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubStatus

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
isAvailable - Boolean! + Bool value indicating whether the hub is available or not.
totalFaults - String! + Total number of experiments in the hub
totalExperiments - String! + Total experiments
name - String! + Name of the chaos hub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
isRemoved - Boolean! + Bool value indicating whether the hub is private or not.
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
sshPublicKey - String + Public SSH key for authenticating into private chaos hub
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
createdAt - String! + Created at timestamp
updatedAt - String! + Updated at timestamp
description - String + Description of ChaosHub
isDefault - Boolean! + Default Hub Identifier
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "xyz789",
+  "repoBranch": "xyz789",
+  "isAvailable": true,
+  "totalFaults": "xyz789",
+  "totalExperiments": "abc123",
+  "name": "abc123",
+  "hubType": "GIT",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "abc123",
+  "isRemoved": true,
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "abc123",
+  "lastSyncedAt": "abc123",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "createdAt": "xyz789",
+  "updatedAt": "xyz789",
+  "description": "abc123",
+  "isDefault": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Chart

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
apiVersion - String! + +
kind - String! + +
metadata - Metadata! + +
spec - Spec! + +
packageInfo - PackageInformation! + +
+
+
+
+
+
Example
+ + +
{
+  "apiVersion": "xyz789",
+  "kind": "abc123",
+  "metadata": Metadata,
+  "spec": Spec,
+  "packageInfo": PackageInformation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CommonProbeProperties

+
+
+
+
Description
+

Defines the common probe properties shared across different ProbeTypes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + +
CommonProbeProperties Types
+

KubernetesCMDProbe

+
+

PROMProbe

+
+

KubernetesHTTPProbe

+
+

K8SProbe

+
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Comparator

+
+
+
+
Description
+

Defines the properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
type - String! + Type of the Comparator
value - String! + Value of the Comparator
criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "abc123",
+  "value": "abc123",
+  "criteria": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ComparatorInput

+
+
+
+
Description
+

Defines the input properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ type - String! + Type of the Comparator
+ value - String! + Value of the Comparator
+ criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "xyz789",
+  "value": "xyz789",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ConfirmInfraRegistrationResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isInfraConfirmed - Boolean! + +
newAccessKey - String + +
infraID - String + +
+
+
+
+
+
Example
+ + +
{
+  "isInfraConfirmed": false,
+  "newAccessKey": "xyz789",
+  "infraID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateChaosHubRequest

+
+
+
+
Description
+

Defines the details required for creating a chaos hub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "tags": ["xyz789"],
+  "description": "abc123",
+  "repoURL": "xyz789",
+  "repoBranch": "xyz789",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "abc123",
+  "sshPrivateKey": "abc123",
+  "sshPublicKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String! + +
+ type - EnvironmentType! + +
+ description - String + +
+ tags - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "abc123",
+  "type": "PROD",
+  "description": "abc123",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateRemoteChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "tags": ["abc123"],
+  "description": "abc123",
+  "repoURL": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

DateRange

+
+
+
+
Description
+

Defines the start date and end date for the filtering the data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ startDate - String! + Start date
+ endDate - String + End date
+
+
+
+
+
Example
+ + +
{
+  "startDate": "abc123",
+  "endDate": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Environment

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
environmentID - String! + +
name - String! + +
description - String + +
tags - [String!] + +
type - EnvironmentType! + +
createdAt - String! + +
createdBy - UserDetails + +
updatedBy - UserDetails + +
updatedAt - String! + +
isRemoved - Boolean + +
infraIDs - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "xyz789",
+  "environmentID": "abc123",
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "type": "PROD",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "updatedAt": "xyz789",
+  "isRemoved": false,
+  "infraIDs": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the environment
+ description - String + ID of the environment
+ type - EnvironmentType + Type name of environment
+ tags - [String!] + Tags of an environment
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "description": "xyz789",
+  "type": "PROD",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - EnvironmentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

PROD

+
+
+

NON_PROD

+
+
+
+
+
+
+
Example
+ + +
"PROD"
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutedByExperiment

+
+
+
+
Description
+

Defines the Executed by which experiment details for Probes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + Experiment ID
experimentName - String! + Experiment Name
updatedAt - Int! + Timestamp at which the experiment was last updated
updatedBy - UserDetails + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "experimentName": "xyz789",
+  "updatedAt": 123,
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutionHistory

+
+
+
+
Description
+

Defines the Execution History of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
mode - Mode! + Probe Mode
faultName - String! + Fault Name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "mode": "SOT",
+  "faultName": "abc123",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Experiment

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentID - String! + ID of the experiment
experimentType - String + Type of the experiment
experimentManifest - String! + Manifest of the experiment
cronSyntax - String! + Cron syntax of the experiment schedule
name - String! + Name of the experiment
description - String! + Description of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
infra - Infra + Target infra in which the experiment will run
isRemoved - Boolean! + Bool value indicating if the experiment has removed
tags - [String!] + Tags of the experiment
createdBy - UserDetails + User who created the experiment
recentExperimentRunDetails - [RecentExperimentRun] + Array of object containing details of recent experiment runs
updatedBy - UserDetails + Details of the user who updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "experimentID": "xyz789",
+  "experimentType": "abc123",
+  "experimentManifest": "abc123",
+  "cronSyntax": "abc123",
+  "name": "xyz789",
+  "description": "abc123",
+  "weightages": [Weightages],
+  "isCustomExperiment": true,
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "infra": Infra,
+  "isRemoved": false,
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "recentExperimentRunDetails": [RecentExperimentRun],
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentFilterInput

+
+
+
+
Description
+

Defines filter options for experiments

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraName - String + Name of the infra in which the experiment is running
+ infraID - String + ID of the infra in which the experiment is running
+ infraActive - Boolean + Bool value indicating if Chaos Infrastructure is active
+ scheduleType - ScheduleType + Scenario type of the experiment i.e. CRON or NON_CRON
+ status - String + Status of the latest experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraName": "abc123",
+  "infraID": "abc123",
+  "infraActive": true,
+  "scheduleType": "CRON",
+  "status": "abc123",
+  "dateRange": DateRange,
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ category - String! + Name of the chart being used
+ experimentName - String! + Name of the experiment
+ hubID - String! + ID of the hub
+
+
+
+
+
Example
+ + +
{
+  "category": "xyz789",
+  "experimentName": "abc123",
+  "hubID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRun

+
+
+
+
Description
+

Defines the details of a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentRunID - ID! + ID of the experiment run which is to be queried
experimentType - String + Type of the experiment
experimentID - ID! + ID of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
updatedAt - String! + Timestamp at which experiment run was last updated
createdAt - String! + Timestamp at which experiment run was created
infra - Infra! + Target infra in which the experiment will run
experimentName - String! + Name of the experiment
experimentManifest - String! + Manifest of the experiment run
phase - ExperimentRunStatus! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
faultsPassed - Int + Number of faults passed
faultsFailed - Int + Number of faults failed
faultsAwaited - Int + Number of faults awaited
faultsStopped - Int + Number of faults stopped
faultsNa - Int + Number of faults which are not available
totalFaults - Int + Total number of faults
executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the faults
isRemoved - Boolean + Bool value indicating if the experiment run has removed
updatedBy - UserDetails + User who has updated the experiment
createdBy - UserDetails + User who has created the experiment run
notifyID - ID + Notify ID of the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "experimentRunID": 4,
+  "experimentType": "xyz789",
+  "experimentID": 4,
+  "weightages": [Weightages],
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "infra": Infra,
+  "experimentName": "xyz789",
+  "experimentManifest": "xyz789",
+  "phase": "All",
+  "resiliencyScore": 123.45,
+  "faultsPassed": 987,
+  "faultsFailed": 987,
+  "faultsAwaited": 123,
+  "faultsStopped": 123,
+  "faultsNa": 987,
+  "totalFaults": 123,
+  "executionData": "abc123",
+  "isRemoved": false,
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails,
+  "notifyID": 4,
+  "runSequence": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunFilterInput

+
+
+
+
Description
+

Defines input type for experiment run filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraID - String + Name of the infra infra
+ experimentType - ScheduleType + Type of the experiment
+ experimentStatus - ExperimentRunStatus + Status of the experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ experimentRunID - String + ID of experiment run
+ experimentRunStatus - [String] + Array of experiment run status
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraID": "abc123",
+  "experimentType": "CRON",
+  "experimentStatus": "All",
+  "dateRange": DateRange,
+  "experimentRunID": "abc123",
+  "experimentRunStatus": ["abc123"],
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunRequest

+
+
+
+
Description
+

Defines the details for a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String! + ID of the experiment
+ notifyID - String + notifyID is required to give an ack for non cron experiment execution
+ experimentRunID - String! + ID of the experiment run which is to be queried
+ experimentName - String! + Name of the experiment
+ executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the experiments
+ infraID - InfraIdentity! + ID of the infra infra in which the experiment is running
+ revisionID - String! + ID of the revision which consists manifest details
+ completed - Boolean! + Bool value indicating if the experiment run has completed
+ isRemoved - Boolean + Bool value indicating if the experiment run has removed
+ updatedBy - String! + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "notifyID": "abc123",
+  "experimentRunID": "xyz789",
+  "experimentName": "abc123",
+  "executionData": "abc123",
+  "infraID": InfraIdentity,
+  "revisionID": "abc123",
+  "completed": false,
+  "isRemoved": false,
+  "updatedBy": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunSortInput

+
+
+
+
Description
+

Defines sorting options for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunStatus

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Running

+
+
+

Completed

+
+
+

Completed_With_Error

+
+
+

Stopped

+
+
+

Skipped

+
+
+

Error

+
+
+

Timeout

+
+
+

Terminated

+
+
+

Queued

+
+
+

NA

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": false}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Experiment

+
+
+

CronExperiment

+
+
+

ChaosEngine

+
+
+

ChaosSchedule

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

Experiments

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
CSV - String! + +
desc - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "CSV": "xyz789",
+  "desc": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultDetails

+
+
+
+
Description
+

Fault Detail consists of all the fault related details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
fault - String! + fault consists of fault.yaml
engine - String! + engine consists engine.yaml
csv - String! + csv consists chartserviceversion.yaml
+
+
+
+
+
Example
+ + +
{
+  "fault": "abc123",
+  "engine": "xyz789",
+  "csv": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
displayName - String! + +
description - String! + +
plan - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "displayName": "abc123",
+  "description": "abc123",
+  "plan": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Float

+
+
+
+
Description
+

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

+
+
+
+
+
Example
+ + +
123.45
+
+ + +
+
+
+
+
+
+ Types +
+

GET

+
+
+
+
Description
+

Details of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "xyz789",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GETRequest

+
+
+
+
Description
+

Details for input of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetChaosHubStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
totalChaosHubs - Int! + Total number of chaoshubs
+
+
+
+
+
Example
+ + +
{"totalChaosHubs": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentResponse

+
+
+
+
Description
+

Defines the details for a given experiment with some additional data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
experimentDetails - Experiment! + Details of experiment
averageResiliencyScore - Float + Average resiliency score of the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentDetails": Experiment,
+  "averageResiliencyScore": 987.65
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentRunStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperimentRuns - Int! + Total number of experiment runs
totalCompletedExperimentRuns - Int! + Total number of completed experiments runs
totalTerminatedExperimentRuns - Int! + Total number of stopped experiment runs
totalRunningExperimentRuns - Int! + Total number of running experiment runs
totalStoppedExperimentRuns - Int! + Total number of stopped experiment runs
totalErroredExperimentRuns - Int! + Total number of errored experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalExperimentRuns": 123,
+  "totalCompletedExperimentRuns": 987,
+  "totalTerminatedExperimentRuns": 123,
+  "totalRunningExperimentRuns": 123,
+  "totalStoppedExperimentRuns": 987,
+  "totalErroredExperimentRuns": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperiments - Int! + Total number of experiments
totalExpCategorizedByResiliencyScore - [ResilienceScoreCategory]! + Total number of cron experiments
+
+
+
+
+
Example
+ + +
{
+  "totalExperiments": 987,
+  "totalExpCategorizedByResiliencyScore": [
+    ResilienceScoreCategory
+  ]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetInfraStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalInfrastructures - Int! + Total number of infrastructures
totalActiveInfrastructure - Int! + Total number of active infrastructures
totalInactiveInfrastructures - Int! + Total number of inactive infrastructures
totalConfirmedInfrastructure - Int! + Total number of confirmed infrastructures
totalNonConfirmedInfrastructures - Int! + Total number of non confirmed infrastructures
+
+
+
+
+
Example
+ + +
{
+  "totalInfrastructures": 987,
+  "totalActiveInfrastructure": 123,
+  "totalInactiveInfrastructures": 123,
+  "totalConfirmedInfrastructure": 987,
+  "totalNonConfirmedInfrastructures": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeReferenceResponse

+
+
+
+
Description
+

Defines the response of the Probe reference API

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
totalRuns - Int! + Total Runs
recentExecutions - [RecentExecutions]! + Recent Executions of the probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "abc123",
+  "totalRuns": 987,
+  "recentExecutions": [RecentExecutions]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeYAMLRequest

+
+
+
+
Description
+

Defines the input requests for GetProbeYAML query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeName - ID! + Probe name of the probe
+ mode - Mode! + Mode of the Probe (SoT, EoT, Edge, Continuous or OnChaos)
+
+
+
+
+
Example
+ + +
{"probeName": 4, "mode": "SOT"}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbesInExperimentRunResponse

+
+
+
+
Description
+

Defines the response for Get Probe In Experiment Run Query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probe - Probe! + Probe Object
mode - Mode! + Mode of the probe
status - Status! + Status of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probe": Probe,
+  "mode": "SOT",
+  "status": Status
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfig

+
+
+
+
Description
+

Details of setting a Git repository

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ branch - String! + Git branch where the chaos charts will be pushed and synced
+ repoURL - String! + URL of the Git repository
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token used for private repository
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "branch": "abc123",
+  "repoURL": "abc123",
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfigResponse

+
+
+
+
Description
+

Response received after configuring GitOps

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
enabled - Boolean! + Bool value indicating whether GitOps is enabled or not
projectID - String! + ID of the project where GitOps is configured
branch - String + Git branch where the chaos charts will be pushed and synced
repoURL - String + URL of the Git repository
authType - AuthType + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token used for private repository
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "enabled": true,
+  "projectID": "abc123",
+  "branch": "abc123",
+  "repoURL": "xyz789",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

HubType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

GIT

+
+
+

REMOTE

+
+
+
+
+
+
+
Example
+ + +
"GIT"
+
+ + +
+
+
+
+
+
+ Types +
+

ID

+
+
+
+
Description
+

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

+
+
+
+
+
Example
+ + +
4
+
+ + +
+
+
+
+
+
+ Types +
+

INFRA_SCOPE

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

namespace

+
+
+

cluster

+
+
+
+
+
+
+
Example
+ + +
"namespace"
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistry

+
+
+
+
Description
+

Defines details for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryName - String! + Name of Image Registry
imageRepoName - String! + Name of image repository
imageRegistryType - String! + Type of the image registry: public/private
secretName - String + Secret which is used for private registry
secretNamespace - String + Namespace where the secret is available
enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryName": "abc123",
+  "imageRepoName": "xyz789",
+  "imageRegistryType": "xyz789",
+  "secretName": "abc123",
+  "secretNamespace": "xyz789",
+  "enableRegistry": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryInput

+
+
+
+
Description
+

Defines input data for querying the details of an image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
+ imageRegistryName - String! + Name of Image Registry
+ imageRepoName - String! + Name of image repository
+ imageRegistryType - String! + Type of the image registry: public/private
+ secretName - String + Secret which is used for private registry
+ secretNamespace - String + Namespace where the secret is available
+ enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryName": "xyz789",
+  "imageRepoName": "abc123",
+  "imageRegistryType": "xyz789",
+  "secretName": "abc123",
+  "secretNamespace": "xyz789",
+  "enableRegistry": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryResponse

+
+
+
+
Description
+

Defines response data for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryInfo - ImageRegistry + Information Image Registry
imageRegistryID - String! + ID of the image registry
projectID - String! + ID of the project in which image registry is created
updatedAt - String + Timestamp when the image registry was last updated
createdAt - String + Timestamp when the image registry was created
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
isRemoved - Boolean + Bool value indicating if the image registry has been removed
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryInfo": ImageRegistry,
+  "imageRegistryID": "abc123",
+  "projectID": "abc123",
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "isRemoved": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Infra

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
infraID - ID! + ID of the infra
name - String! + Name of the infra
description - String + Description of the infra
tags - [String!] + Tags of the infra
environmentID - String! + Environment ID for the infra
platformName - String! + Infra Platform Name eg. GKE,AWS, Others
isActive - Boolean! + Boolean value indicating if chaos infrastructure is active or not
isInfraConfirmed - Boolean! + Boolean value indicating if chaos infrastructure is confirmed or not
isRemoved - Boolean! + Boolean value indicating if chaos infrastructure is removed or not
updatedAt - String! + Timestamp when the infra was last updated
createdAt - String! + Timestamp when the infra was created
noOfExperiments - Int + Number of schedules created in the infra
noOfExperimentRuns - Int + Number of experiments run in the infra
token - String! + Token used to verify and retrieve the infra manifest
infraNamespace - String + Namespace where the infra is being installed
serviceAccount - String + Name of service account used by infra
infraScope - String! + Scope of the infra : ns or cluster
infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
lastExperimentTimestamp - String + Timestamp of the last experiment run in the infra
startTime - String! + Timestamp when the infra got connected
version - String! + Version of the infra
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
infraType - InfrastructureType + Type of the infrastructure
updateStatus - UpdateStatus! + update status of infra
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "infraID": "4",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "environmentID": "abc123",
+  "platformName": "abc123",
+  "isActive": true,
+  "isInfraConfirmed": true,
+  "isRemoved": false,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "noOfExperiments": 123,
+  "noOfExperimentRuns": 123,
+  "token": "xyz789",
+  "infraNamespace": "xyz789",
+  "serviceAccount": "xyz789",
+  "infraScope": "abc123",
+  "infraNsExists": false,
+  "infraSaExists": true,
+  "lastExperimentTimestamp": "xyz789",
+  "startTime": "xyz789",
+  "version": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "infraType": "Kubernetes",
+  "updateStatus": "AVAILABLE"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraActionResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
action - ActionPayload! + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "abc123",
+  "action": ActionPayload
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraEventResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
eventID - ID! + +
eventType - String! + +
eventName - String! + +
description - String! + +
infra - Infra! + +
+
+
+
+
+
Example
+ + +
{
+  "eventID": 4,
+  "eventType": "xyz789",
+  "eventName": "xyz789",
+  "description": "abc123",
+  "infra": Infra
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the infra
+ infraID - String + ID of the infra
+ description - String + ID of the infra
+ platformName - String + Platform name of infra
+ infraScope - INFRA_SCOPE + Scope of infra
+ isActive - Boolean + Status of infra
+ tags - [String] + Tags of an infra
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "infraID": "abc123",
+  "description": "xyz789",
+  "platformName": "xyz789",
+  "infraScope": "namespace",
+  "isActive": true,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraIdentity

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - String! + +
+ accessKey - String! + +
+ version - String! + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "abc123",
+  "accessKey": "xyz789",
+  "version": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraVersionDetails

+
+
+
+
Description
+

InfraVersionDetails returns the details of compatible infra versions and the latest infra version supported

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
latestVersion - String! + Latest infra version supported
compatibleVersions - [String!]! + List of all infra versions supported
+
+
+
+
+
Example
+ + +
{
+  "latestVersion": "abc123",
+  "compatibleVersions": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfrastructureType

+
+
+
+
Values
+ + + + + + + + + + + + + +
Enum ValueDescription
+

Kubernetes

+
+
+
+
+
+
+
Example
+ + +
"Kubernetes"
+
+ + +
+
+
+
+
+
+ Types +
+

Int

+
+
+
+
Description
+

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

+
+
+
+
+
Example
+ + +
123
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbe

+
+
+
+
Description
+

Defines the K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
group - String + Group of the Probe
version - String! + Version of the Probe
resource - String! + Resource of the Probe
namespace - String + Namespace of the Probe
resourceNames - String + Resource Names of the Probe
fieldSelector - String + Field Selector of the Probe
labelSelector - String + Label Selector of the Probe
operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "group": "xyz789",
+  "version": "xyz789",
+  "resource": "abc123",
+  "namespace": "xyz789",
+  "resourceNames": "xyz789",
+  "fieldSelector": "abc123",
+  "labelSelector": "xyz789",
+  "operation": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbeRequest

+
+
+
+
Description
+

Defines the input for K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ group - String + Group of the Probe
+ version - String! + Version of the Probe
+ resource - String! + Resource of the Probe
+ namespace - String + Namespace of the Probe
+ resourceNames - String + Resource Names of the Probe
+ fieldSelector - String + Field Selector of the Probe
+ labelSelector - String + Label Selector of the Probe
+ operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "group": "abc123",
+  "version": "abc123",
+  "resource": "xyz789",
+  "namespace": "xyz789",
+  "resourceNames": "xyz789",
+  "fieldSelector": "abc123",
+  "labelSelector": "xyz789",
+  "operation": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeGVRRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ group - String! + +
+ version - String! + +
+ resource - String! + +
+
+
+
+
+
Example
+ + +
{
+  "group": "xyz789",
+  "version": "abc123",
+  "resource": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObject

+
+
+
+
Description
+

KubeObject consists of the namespace and the available resources in the same

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
namespace - String! + Namespace of the resource
data - [ObjectData]! + Details of the resource
+
+
+
+
+
Example
+ + +
{
+  "namespace": "xyz789",
+  "data": [ObjectData]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectData

+
+
+
+
Description
+

Defines the details of Kubernetes object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes object details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes object is present
+ kubeObj - String! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "requestID": 4,
+  "infraID": InfraIdentity,
+  "kubeObj": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes object data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra in which the Kubernetes object is present
+ kubeObjRequest - KubeGVRRequest + GVR Request
+ objectType - String! + +
+ workloads - [Workload] + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": 4,
+  "kubeObjRequest": KubeGVRRequest,
+  "objectType": "abc123",
+  "workloads": [Workload]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes object is present
kubeObj - [KubeObject]! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{"infraID": 4, "kubeObj": [KubeObject]}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbe

+
+
+
+
Description
+

Defines the CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
command - String! + Command of the Probe
comparator - Comparator! + Comparator of the Probe
source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "command": "abc123",
+  "comparator": Comparator,
+  "source": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ command - String! + Command of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+ source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "command": "xyz789",
+  "comparator": ComparatorInput,
+  "source": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbe

+
+
+
+
Description
+

Defines the Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
url - String! + URL of the Probe
method - Method! + HTTP method of the Probe
insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "url": "abc123",
+  "method": Method,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ url - String! + URL of the Probe
+ method - MethodRequest! + HTTP method of the Probe
+ insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "url": "xyz789",
+  "method": MethodRequest,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+ +
+
+ Types +
+

ListChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubIDs - [ID!] + Array of ChaosHub IDs for which details will be fetched
+ filter - ChaosHubFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{"chaosHubIDs": [4], "filter": ChaosHubFilterInput}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - EnvironmentFilterInput + Details for fetching filtered data
+ sort - EnvironmentSortInput + Details for fetching sorted data
+
+
+
+
+
Example
+ + +
{
+  "environmentIDs": [4],
+  "pagination": Pagination,
+  "filter": EnvironmentFilterInput,
+  "sort": EnvironmentSortInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfEnvironments - Int! + Total number of environment
environments - [Environment] + +
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfEnvironments": 123,
+  "environments": [Environment]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRequest

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentSortInput + Details for fetching sorted data
+ filter - ExperimentFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentIDs": ["4"],
+  "pagination": Pagination,
+  "sort": ExperimentSortInput,
+  "filter": ExperimentFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentResponse

+
+
+
+
Description
+

Defines the details for a experiment with total experiment count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperiments - Int! + Total number of experiments
experiments - [Experiment]! + Details related to the experiments
+
+
+
+
+
Example
+ + +
{"totalNoOfExperiments": 123, "experiments": [Experiment]}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunRequest

+
+
+
+
Description
+

Defines the details for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentRunIDs - [ID] + Array of experiment run IDs for which details will be fetched
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentRunSortInput + Details for fetching sorted data
+ filter - ExperimentRunFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentRunIDs": [4],
+  "experimentIDs": ["4"],
+  "pagination": Pagination,
+  "sort": ExperimentRunSortInput,
+  "filter": ExperimentRunFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunResponse

+
+
+
+
Description
+

Defines the details of a experiment to sent as response

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperimentRuns - Int! + Total number of experiment runs
experimentRuns - [ExperimentRun]! + Defines details of experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfExperimentRuns": 123,
+  "experimentRuns": [ExperimentRun]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraRequest

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraIDs - [ID!] + Array of infra IDs for which details will be fetched
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - InfraFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "infraIDs": ["4"],
+  "environmentIDs": [4],
+  "pagination": Pagination,
+  "filter": InfraFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraResponse

+
+
+
+
Description
+

Defines the details for a infras with total infras count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfInfras - Int! + Total number of infras
infras - [Infra]! + Details related to the infras
+
+
+
+
+
Example
+ + +
{"totalNoOfInfras": 987, "infras": [Infra]}
+
+ + +
+
+
+
+
+
+ Types +
+

Maintainer

+
+
+
+
Description
+

Defines the details of the maintainer

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the maintainer
email - String! + Email of the maintainer
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Metadata

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
version - String! + +
annotations - Annotation! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "version": "xyz789",
+  "annotations": Annotation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Method

+
+
+
+
Description
+

Defines the methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
get - GET + A GET request
post - POST + A POST request
+
+
+
+
+
Example
+ + +
{"get": GET, "post": POST}
+
+ + +
+
+
+
+
+
+ Types +
+

MethodRequest

+
+
+
+
Description
+

Defines the input for methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ get - GETRequest + A GET request
+ post - POSTRequest + A POST request
+
+
+
+
+
Example
+ + +
{
+  "get": GETRequest,
+  "post": POSTRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Mode

+
+
+
+
Description
+

Defines the different modes of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

SOT

+
+
+

EOT

+
+
+

Edge

+
+
+

Continuous

+
+
+

OnChaos

+
+
+
+
+
+
+
Example
+ + +
"SOT"
+
+ + +
+
+
+
+
+
+ Types +
+

ObjectData

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
labels - [String!] + Labels present in the resource
name - String! + Name of the resource
+
+
+
+
+
Example
+ + +
{
+  "labels": ["abc123"],
+  "name": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POST

+
+
+
+
Description
+

Details of POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
contentType - String + Content Type of the request
body - String + Body of the request
bodyPath - String + Body Path of the HTTP body required for the http post request
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "xyz789",
+  "body": "xyz789",
+  "bodyPath": "abc123",
+  "criteria": "abc123",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POSTRequest

+
+
+
+
Description
+

Details for input of the POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ contentType - String + Content Type of the request
+ body - String + Body of the request
+ bodyPath - String + Body Path of the request for Body
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "abc123",
+  "body": "abc123",
+  "bodyPath": "abc123",
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbe

+
+
+
+
Description
+

Defines the PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
endpoint - String! + Endpoint of the Probe
query - String + Query of the Probe
queryPath - String + Query path of the Probe
comparator - Comparator! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "endpoint": "abc123",
+  "query": "abc123",
+  "queryPath": "abc123",
+  "comparator": Comparator
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbeRequest

+
+
+
+
Description
+

Defines the input for PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ endpoint - String! + Endpoint of the Probe
+ query - String + Query of the Probe
+ queryPath - String + Query path of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "endpoint": "abc123",
+  "query": "abc123",
+  "queryPath": "xyz789",
+  "comparator": ComparatorInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PackageInformation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
packageName - String! + +
experiments - [Experiments!]! + +
+
+
+
+
+
Example
+ + +
{
+  "packageName": "xyz789",
+  "experiments": [Experiments]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Pagination

+
+
+
+
Description
+

Defines data required to fetch paginated data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ page - Int! + Page number for which data will be fetched
+ limit - Int! + Number of data to be fetched
+
+
+
+
+
Example
+ + +
{"page": 987, "limit": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLog

+
+
+
+
Description
+

Response received for querying pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - InfraIdentity! + ID of the cluster
+ requestID - ID! + Unique request ID of a particular node which is being queried
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podType - String! + Type of the pod: chaosengine
+ log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "infraID": InfraIdentity,
+  "requestID": "4",
+  "experimentRunID": 4,
+  "podName": "xyz789",
+  "podType": "abc123",
+  "log": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogRequest

+
+
+
+
Description
+

Defines the details for fetching the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the cluster
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podNamespace - String! + Namespace where the pod is running
+ podType - String! + Type of the pod: chaosEngine or not pod
+ expPod - String + Name of the experiment pod fetched from execution data
+ runnerPod - String + Name of the runner pod fetched from execution data
+ chaosNamespace - String + Namespace where the experiment is executing
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "experimentRunID": "4",
+  "podName": "abc123",
+  "podNamespace": "abc123",
+  "podType": "abc123",
+  "expPod": "xyz789",
+  "runnerPod": "abc123",
+  "chaosNamespace": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogResponse

+
+
+
+
Description
+

Defines the response received for querying querying the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
podName - String! + Name of the pod for which logs are queried
podType - String! + Type of the pod: chaosengine
log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "podName": "abc123",
+  "podType": "abc123",
+  "log": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PredefinedExperimentList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentName - String! + Name of the experiment
experimentCSV - String! + Experiment CSV
experimentManifest - String! + Experiment Manifest
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "experimentCSV": "xyz789",
+  "experimentManifest": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Probe

+
+
+
+
Description
+

Defines the details of the Probe entity

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
description - String + Description of the Probe
tags - [String!] + Tags of the Probe
type - ProbeType! + Type of the Probe [From list of ProbeType enum]
infrastructureType - InfrastructureType! + Infrastructure type of the Probe
kubernetesHTTPProperties - KubernetesHTTPProbe + Kubernetes HTTP Properties of the specific type of the Probe
kubernetesCMDProperties - KubernetesCMDProbe + Kubernetes CMD Properties of the specific type of the Probe
k8sProperties - K8SProbe + K8S Properties of the specific type of the Probe
promProperties - PROMProbe + PROM Properties of the specific type of the Probe
recentExecutions - [ProbeRecentExecutions!] + All execution histories of the probe
referencedBy - Int + Referenced by how many faults
updatedAt - String! + Timestamp at which the Probe was last updated
createdAt - String! + Timestamp at which the Probe was created
updatedBy - UserDetails + User who has updated the Probe
createdBy - UserDetails + User who has created the Probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "name": "xyz789",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbe,
+  "kubernetesCMDProperties": KubernetesCMDProbe,
+  "k8sProperties": K8SProbe,
+  "promProperties": PROMProbe,
+  "recentExecutions": [ProbeRecentExecutions],
+  "referencedBy": 123,
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeFilterInput

+
+
+
+
Description
+

Defines the input for Probe filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the Probe
+ dateRange - DateRange + Date range for filtering purpose
+ type - [ProbeType] + Type of the Probe [From list of ProbeType enum]
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "dateRange": DateRange,
+  "type": ["httpProbe"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of global probe in ListProbe API with different fault and execution history each time

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "faultName": "abc123",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRequest

+
+
+
+
Description
+

Defines the details required for creating a Chaos Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - ID! + Name of the Probe
+ description - String + Description of the Probe
+ tags - [String!] + Tags of the Probe
+ type - ProbeType! + Type of the Probe [From list of ProbeType enum]
+ infrastructureType - InfrastructureType! + Infrastructure type of the Probe
+ kubernetesHTTPProperties - KubernetesHTTPProbeRequest + HTTP Properties of the specific type of the Probe
+ kubernetesCMDProperties - KubernetesCMDProbeRequest + CMD Properties of the specific type of the Probe
+ k8sProperties - K8SProbeRequest + K8S Properties of the specific type of the Probe
+ promProperties - PROMProbeRequest + PROM Properties of the specific type of the Probe
+
+
+
+
+
Example
+ + +
{
+  "name": 4,
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbeRequest,
+  "kubernetesCMDProperties": KubernetesCMDProbeRequest,
+  "k8sProperties": K8SProbeRequest,
+  "promProperties": PROMProbeRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeType

+
+
+
+
Description
+

Defines the different types of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

httpProbe

+
+
+

cmdProbe

+
+
+

promProbe

+
+
+

k8sProbe

+
+
+
+
+
+
+
Example
+ + +
"httpProbe"
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeVerdict

+
+
+
+
Description
+

Defines the older different statuses of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

Passed

+
+
+

Failed

+
+
+

NA

+
+
+

Awaited

+
+
+
+
+
+
+
Example
+ + +
"Passed"
+
+ + +
+
+
+
+
+
+ Types +
+

Provider

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + +
+
+
+
+
+
Example
+ + +
{"name": "xyz789"}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
mode - Mode! + Probe mode
executionHistory - [ExecutionHistory!]! + Execution History
+
+
+
+
+
Example
+ + +
{
+  "faultName": "xyz789",
+  "mode": "SOT",
+  "executionHistory": [ExecutionHistory]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExperimentRun

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
phase - String! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
createdBy - UserDetails + User who created the experiment run
updatedBy - UserDetails + User who updated the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "phase": "xyz789",
+  "resiliencyScore": 123.45,
+  "updatedAt": "xyz789",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "runSequence": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraRequest

+
+
+
+
Description
+

Defines the details for the new infra being connected

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the infra
+ environmentID - String! + Environment ID for the infra
+ infrastructureType - InfrastructureType! + Type of Infra : internal/external
+ description - String + Description of the infra
+ platformName - String! + Infra Platform Name eg. GKE,AWS, Others
+ infraNamespace - String + Namespace where the infra is being installed
+ serviceAccount - String + Name of service account used by infra
+ infraScope - String! + Scope of the infra : ns or infra
+ infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
+ infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
+ skipSsl - Boolean + Bool value indicating whether infra will skip ssl checks or not
+ nodeSelector - String + Node selectors used by infra
+ tolerations - [Toleration] + Node tolerations used by infra
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "environmentID": "xyz789",
+  "infrastructureType": "Kubernetes",
+  "description": "xyz789",
+  "platformName": "xyz789",
+  "infraNamespace": "xyz789",
+  "serviceAccount": "xyz789",
+  "infraScope": "abc123",
+  "infraNsExists": false,
+  "infraSaExists": false,
+  "skipSsl": false,
+  "nodeSelector": "xyz789",
+  "tolerations": [Toleration],
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraResponse

+
+
+
+
Description
+

Response received for registering a new infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
token - String! + Token used to verify and retrieve the infra manifest
infraID - String! + Unique ID for the newly registered infra
name - String! + Infra name as sent in request
manifest - String! + Infra Manifest
+
+
+
+
+
Example
+ + +
{
+  "token": "xyz789",
+  "infraID": "abc123",
+  "name": "xyz789",
+  "manifest": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ResilienceScoreCategory

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
id - Int! + Lower bound of the range(inclusive)
count - Int! + total experiments with avg resilience score between lower bound and upper bound(exclusive)
+
+
+
+
+
Example
+ + +
{"id": 987, "count": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

ResourceDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
description - String + +
tags - [String!] + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceDetails Types
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RunChaosExperimentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
notifyID - ID! + +
+
+
+
+
+
Example
+ + +
{"notifyID": 4}
+
+ + +
+
+
+
+
+
+ Types +
+

SSHKey

+
+
+
+
Description
+

Defines the SSHKey details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
publicKey - String! + Public SSH key authenticating into git repository
privateKey - String! + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "publicKey": "abc123",
+  "privateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

SaveChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the experiment
+ type - ExperimentType + Type of the experiment
+ name - String! + Name of the experiment
+ description - String! + Description of the experiment
+ manifest - String! + Manifest of the experiment
+ infraID - ID! + ID of the target infrastructure in which the experiment will run
+ tags - [String!] + Tags of the infrastructure
+
+
+
+
+
Example
+ + +
{
+  "id": "xyz789",
+  "type": "All",
+  "name": "xyz789",
+  "description": "abc123",
+  "manifest": "abc123",
+  "infraID": 4,
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ScheduleType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

CRON

+
+
+

NON_CRON

+
+
+

ALL

+
+
+
+
+
+
+
Example
+ + +
"CRON"
+
+ + +
+
+
+
+
+
+ Types +
+

ServerVersionResponse

+
+
+
+
Description
+

Response received for fetching GQL server version

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
key - String! + Returns server version key
value - String! + Returns server version value
+
+
+
+
+
Example
+ + +
{
+  "key": "abc123",
+  "value": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Spec

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
displayName - String! + +
categoryDescription - String! + +
keywords - [String!]! + +
maturity - String! + +
maintainers - [Maintainer!]! + +
minKubeVersion - String! + +
provider - Provider! + +
links - [Link!]! + +
faults - [FaultList!]! + +
experiments - [String!] + +
chaosExpCRDLink - String! + +
platforms - [String!]! + +
chaosType - String + +
+
+
+
+
+
Example
+ + +
{
+  "displayName": "xyz789",
+  "categoryDescription": "abc123",
+  "keywords": ["abc123"],
+  "maturity": "xyz789",
+  "maintainers": [Maintainer],
+  "minKubeVersion": "abc123",
+  "provider": Provider,
+  "links": [Link],
+  "faults": [FaultList],
+  "experiments": ["xyz789"],
+  "chaosExpCRDLink": "abc123",
+  "platforms": ["abc123"],
+  "chaosType": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Status

+
+
+
+
Description
+

Status defines whether a probe is pass or fail

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
verdict - ProbeVerdict! + Verdict defines the verdict of the probe, range: Passed, Failed, N/A
description - String + Description defines the description of probe status
+
+
+
+
+
Example
+ + +
{
+  "verdict": "Passed",
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

String

+
+
+
+
Description
+

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

+
+
+
+
+
Example
+ + +
"xyz789"
+
+ + +
+
+
+
+
+
+ Types +
+

Toleration

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ tolerationSeconds - Int + +
+ key - String + +
+ operator - String + +
+ effect - String + +
+ value - String + +
+
+
+
+
+
Example
+ + +
{
+  "tolerationSeconds": 987,
+  "key": "abc123",
+  "operator": "xyz789",
+  "effect": "abc123",
+  "value": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the chaos hub
+ name - String! + Name of the chaos hub
+ description - String + Description of the infra
+ tags - [String!] + Tags of the infra
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "id": "abc123",
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "repoURL": "abc123",
+  "repoBranch": "abc123",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String + +
+ description - String + +
+ tags - [String] + +
+ type - EnvironmentType + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "type": "PROD"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateStatus

+
+
+
+
Description
+

UpdateStatus represents if infra needs to be updated

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

AVAILABLE

+
+
+

MANDATORY

+
+
+

NOT_REQUIRED

+
+
+
+
+
+
+
Example
+ + +
"AVAILABLE"
+
+ + +
+
+
+
+
+
+ Types +
+

UserDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
userID - String! + +
username - String! + +
email - String! + +
+
+
+
+
+
Example
+ + +
{
+  "userID": "abc123",
+  "username": "xyz789",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Weightages

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Name of the fault
weightage - Int! + Weightage of the experiment
+
+
+
+
+
Example
+ + +
{"faultName": "xyz789", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

WeightagesInput

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ faultName - String! + Name of the fault
+ weightage - Int! + Weightage of the fault
+
+
+
+
+
Example
+ + +
{"faultName": "xyz789", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

Workload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + +
+ kind - String! + +
+ namespace - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "kind": "abc123",
+  "namespace": "abc123"
+}
+
+ + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.0/config.yml b/mkdocs/docs/graphql/v3.10.0/config.yml new file mode 100644 index 00000000000..ff61ac839eb --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.0/config.yml @@ -0,0 +1,33 @@ +spectaql: + targetDir: ./mkdocs/docs/graphql/v3.10.0 + logoFile: ./mkdocs/docs/graphql/logo.png + faviconFile: ./mkdocs/docs/graphql/logo.png + displayAllServers: true + themeDir: ./mkdocs/docs/graphql/v3.10.0/custom-theme + +introspection: + removeTrailingPeriodFromDescriptions: false + schemaFile: ./chaoscenter/graphql/definitions/shared/*.graphqls + queryNameStrategy: capitalizeFirst + fieldExpansionDepth: 2 + + spectaqlDirective: + enable: true + +extensions: + graphqlScalarExamples: true + +info: + title: ChaosCenter API Documentation + description: Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform. + + x-introItems: + - title: Common Error Response + file: ./mkdocs/docs/graphql/v3.10.0/error_response_guide.md + +servers: + - url: http://localhost:8080 + description: Dev + - url: http://localhost:8080/query + description: Prod + production: true diff --git a/mkdocs/docs/graphql/v3.10.0/custom-theme/stylesheets/custom.scss b/mkdocs/docs/graphql/v3.10.0/custom-theme/stylesheets/custom.scss new file mode 100644 index 00000000000..68e1aa2268c --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.0/custom-theme/stylesheets/custom.scss @@ -0,0 +1,24 @@ + +$line-height-heading: 1.2; +$font-size-large-heading: 1.7105263158rem; +$font-weight-large-heading: 700; +$content-padding: 20px; +$text-color: #535b60; +$text-weight: 400; +$text-size: 1.5789473684rem; + +#spectaql { + h2 { + color: $text-color; + font-weight: $text-weight; + font-size: $text-size; + } + + .doc-heading { + line-height: $line-height-heading; + font-size: $font-size-large-heading; + font-weight: $font-weight-large-heading; + color: #535b60 + } + +} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.0/error_response_guide.md b/mkdocs/docs/graphql/v3.10.0/error_response_guide.md new file mode 100644 index 00000000000..76e4ab30fce --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.0/error_response_guide.md @@ -0,0 +1,29 @@ +All error responses follow the structure outlined below. + +```json +{ + "errors": [ + { + "message": "Error message", + "path": [ + "Request path" + ] + } + ], + "data": {} +} +``` + +### Field Descriptions: +- **errors**:
+ An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
+ **Type: `Array`**

+ - **message**:
+ A description of the error.
+ **Type: `String`**

+ - **path**:
+ Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
+ **Type: `Array of Strings`**

+- **data**:
+ This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
+ **Type: `Object`**
diff --git a/mkdocs/docs/graphql/v3.10.0/images/favicon.png b/mkdocs/docs/graphql/v3.10.0/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.10.0/images/logo.png b/mkdocs/docs/graphql/v3.10.0/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.10.0/javascripts/spectaql.min.js b/mkdocs/docs/graphql/v3.10.0/javascripts/spectaql.min.js new file mode 100644 index 00000000000..6ef3202c222 --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.0/javascripts/spectaql.min.js @@ -0,0 +1 @@ +function scrollSpy(){var l=5,e=document.querySelector("html"),c=(e&&(e=window.getComputedStyle(e).scrollPaddingTop)&&"string"==typeof e&&"auto"!==e&&e.endsWith("px")&&(l+=parseInt(e.split("px")[0])),"nav-scroll-active"),i=null,d=[];function t(){i=null;var e=document.querySelectorAll("[data-traverse-target]");Array.prototype.forEach.call(e,function(e){d.push({id:e.id,top:e.offsetTop})})}var n=debounce(function(){t(),o()},500),o=debounce(function(){var e,t,n,o,r=(e=>{for(var t=e+l,n=0;n=d[n].top&&(!o||t{toggleMenu(),scrollSpy()}); \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.0/stylesheets/spectaql.min.css b/mkdocs/docs/graphql/v3.10.0/stylesheets/spectaql.min.css new file mode 100644 index 00000000000..e7666ab6b36 --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.0/stylesheets/spectaql.min.css @@ -0,0 +1 @@ +#spectaql h2{color:#535b60;font-weight:400;font-size:1.5789473684rem}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;font-weight:700;color:#535b60}#spectaql{padding:0;margin:0}#spectaql pre{overflow:auto;margin-top:0;margin-bottom:20px}#spectaql pre code{display:block;background:#ccc}#spectaql table{width:100%;table-layout:fixed;text-align:left;border-collapse:collapse}#spectaql table td,#spectaql table th{margin:0;padding:0}#spectaql #introduction .example-section>*,#spectaql .definition-heading,#spectaql .doc-heading,#spectaql .introduction-item-title,#spectaql .operation-heading{overflow:hidden;text-overflow:ellipsis}#spectaql #page{display:flex}#spectaql #page *{box-sizing:border-box}#spectaql #page.drawer-open #sidebar{z-index:1000;transform:translateX(0)}#spectaql #page.drawer-open .drawer-overlay{display:block;background:rgba(0,0,0,.5);z-index:10}#spectaql #sidebar{position:fixed;min-width:250px;max-width:250px;flex-shrink:0;transition:transform .2s ease-out;transform:translateX(-100%);z-index:10;padding-top:20px;background:#fff}@media (min-width:48em){#spectaql #sidebar{position:relative;transform:none}}@media (min-width:64em){#spectaql #sidebar{min-width:300px;max-width:300px}}#spectaql .sidebar-top-container{display:flex;align-items:center;padding:0 20px}#spectaql #mobile-navbar{display:flex;align-items:center;position:sticky;top:0}@media (min-width:48em){#spectaql #mobile-navbar{display:none}}#spectaql .sidebar-open-button{display:flex;align-items:flex-start;margin:0;padding:0;border:none;background:0 0}#spectaql .sidebar-open-button .hamburger{width:16px;height:14px;cursor:pointer}#spectaql .sidebar-open-button .hamburger::after{display:block;content:"";height:2px;background:#535b60;box-shadow:0 5px 0 #535b60,0 10px 0 #535b60}#spectaql .sidebar-open-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .close-button{display:block}#spectaql .close-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width:48em){#spectaql .close-button{display:none}}#spectaql .drawer-overlay{display:none;position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0)}@media (min-width:48em){#spectaql .drawer-overlay{display:none!important}}#spectaql #nav{display:flex;flex-direction:column;max-height:calc(100vh - 0px);padding:0 20px;padding-bottom:20px;position:sticky;top:0;overflow:auto}#spectaql #logo{margin-right:auto}#spectaql #logo img{display:block;width:100%;max-width:100%}#spectaql .nav-group-items,#spectaql .nav-group-section-items{padding:0;margin:0}#spectaql .nav-group-items>li,#spectaql .nav-group-section-items>li{list-style:none}#spectaql .nav-group-items .nav-group-section-title,#spectaql .nav-group-items>li,#spectaql .nav-group-section-items .nav-group-section-title,#spectaql .nav-group-section-items>li{overflow:hidden;text-overflow:ellipsis}#spectaql .nav-group-section-items{display:none}#spectaql .nav-scroll-expand .nav-group-section-items{display:block}#spectaql #docs{position:relative;margin:0 auto;min-width:100px;max-width:88em;flex-grow:1;flex-shrink:1;padding:20px}@media (min-width:48em){#spectaql .doc-row{display:flex;flex-wrap:wrap}}#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:100%}@media (min-width:48em){#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:50%}}@media (min-width:48em){#spectaql .doc-row .doc-copy{padding-right:20px}}@media (min-width:48em){#spectaql .doc-row .doc-examples{padding-left:20px}}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e}#spectaql{font-family:-apple-system,BlinkMacSystemFont,system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.6;background:#fff;color:#535b60}@media (min-width:32em){#spectaql{font-size:16px}}#spectaql a{color:#0298bf;text-decoration:none}#spectaql a:hover{color:#0182a2}#spectaql a:active,#spectaql a:focus{color:#0298bf}#spectaql code{font-size:.875em;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}#spectaql pre{color:#fff}#spectaql pre code{background:#222}#spectaql pre code,#spectaql pre code.hljs{font-size:.82em;line-height:1.4;padding:15px 20px}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;margin-top:10px}@media (min-width:48em){#spectaql .doc-heading{margin-top:-10px}}#spectaql .close-button{background:0 0;border:none;padding:5px;font-size:16px;font-weight:700;color:#535b60}#spectaql #introduction{margin-bottom:60px}#spectaql #introduction .example-section:not(.example-section-is-code){margin-bottom:20px}#spectaql #introduction .example-section:not(.example-section-is-code) h5,#spectaql #introduction .example-section:not(.example-section-is-code) p{margin:0;font-size:1em}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:20px;padding-bottom:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:30px;padding-bottom:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:40px;padding-bottom:40px}}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:20px;padding-right:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:30px;padding-right:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:50px;padding-right:50px}}#spectaql #sidebar{padding-bottom:0;background:#fff}#spectaql #sidebar a{color:#535b60}#spectaql #sidebar a.nav-scroll-active,#spectaql #sidebar a:hover{font-weight:700}#spectaql #sidebar a.nav-scroll-active{color:#535b60}#spectaql #sidebar a:hover{color:#0182a2}@media (min-width:48em){#spectaql #sidebar{border-right:2px solid #d8d8d8}}#spectaql #mobile-navbar{background:#fff;margin-top:-20px;margin-left:-20px;margin-right:-20px}@media (min-width:32em){#spectaql #mobile-navbar{margin-top:-30px;margin-left:-30px;margin-right:-30px}}#spectaql #mobile-navbar .sidebar-open-button::after{display:block;content:"All Topics";margin-left:10px;color:#535b60}#spectaql #nav .nav-group{margin-top:20px}#spectaql #nav .nav-group li{margin-bottom:5px}#spectaql #nav .nav-group-title{font-size:.875em;font-weight:400;margin:0 0 6px 0;color:#999}#spectaql #nav .nav-group-section-title{font-size:inherit;margin:0;margin-bottom:5px;font-weight:400}#spectaql #nav .nav-group-section-items{margin-left:.75em}#spectaql .definition,#spectaql .operation{margin-bottom:60px}#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.72em}#spectaql .definition .definition-heading code,#spectaql .definition .operation-heading code,#spectaql .operation .definition-heading code,#spectaql .operation .operation-heading code{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:32em){#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.7105263158rem}}#spectaql .definition-group-name,#spectaql .group-heading,#spectaql .operation-group-name{border-top:2px solid #d8d8d8;padding-top:3px;color:#999;font-size:inherit;font-weight:inherit}#spectaql .definition-group-name a,#spectaql .group-heading a,#spectaql .operation-group-name a{color:#999}#spectaql .definition-group-name a:hover,#spectaql .group-heading a:hover,#spectaql .operation-group-name a:hover{font-weight:700}#spectaql .doc-examples{margin-top:20px}#spectaql .doc-examples .example-heading{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .doc-examples .example-section-is-code h5{color:#999;text-transform:uppercase;background:#000;font-size:.75em;font-weight:700;padding:.6em 0 .6em 20px;margin:0;opacity:1}@media (min-width:48em){#spectaql .doc-examples{margin-top:0}}#spectaql .doc-copy p{margin:0 0 20px 0}#spectaql .doc-copy p:last-child{margin-bottom:0}#spectaql .doc-copy table tr th{font-weight:400;border-bottom:2px solid #d8d8d8}#spectaql .doc-copy table tr td{border-bottom:1px solid #e0e0e0}#spectaql .doc-copy table tr.row-has-field-arguments td,#spectaql .doc-copy table tr:last-child td{border-bottom:none}#spectaql .doc-copy table tr td,#spectaql .doc-copy table tr th{padding:5px}#spectaql .doc-copy table tr td:first-child,#spectaql .doc-copy table tr th:first-child{padding-left:0}#spectaql .doc-copy table tr td:last-child,#spectaql .doc-copy table tr th:last-child{padding-right:0}#spectaql .doc-copy .doc-copy-section{margin-bottom:30px}#spectaql .doc-copy .doc-copy-section>h5{margin:0 0 5px 0;font-size:inherit;font-weight:inherit;color:#999}#spectaql .doc-copy .definition-description>h5,#spectaql .doc-copy .definition-properties>h5,#spectaql .doc-copy .operation-description>h5{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .field-arguments{font-size:.875em;background-color:#fafbfc;border:1px solid #e0e0e0;padding:10px;margin-bottom:5px}#spectaql .field-arguments p{margin:10px 0 0 0}#spectaql .field-arguments h5.field-arguments-heading{margin:0;padding:0 0 10px 0;font-weight:inherit;color:#999}#spectaql .field-arguments .field-argument{border-top:1px #e0e0e0 solid;padding:10px 0}#spectaql .field-arguments .field-argument:last-child{padding-bottom:0}#spectaql .field-arguments .field-argument-name{margin:0;font-size:inherit;font-weight:inherit}#spectaql .deprecation-reason{word-break:break-word}#spectaql .deprecation-reason::before{display:inline;content:"Deprecated";padding:2px 5px;margin-right:5px;background:#fed7d8;color:#c60609;font-weight:700;font-size:.875em} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.x/api.html b/mkdocs/docs/graphql/v3.10.x/api.html new file mode 100644 index 00000000000..dbcfca8f863 --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.x/api.html @@ -0,0 +1,17877 @@ + + + + + + + ChaosCenter API Documentation + + + + +
+ +
+
+ +
+
+

ChaosCenter API Documentation

+
+
+
+

Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform.

+
+
+
+
API Endpoints
+
# Dev:
+http://localhost:8080
+# Prod:
+http://localhost:8080/query
+
+
+
+
+
+

Common Error Response

+
+
+

All error responses follow the structure outlined below.

+
{
+  "errors": [
+    {
+      "message": "Error message",
+      "path": [
+        "Request path"
+      ]
+    }
+  ],
+  "data": {}
+}
+
+

Field Descriptions:

+
    +
  • errors:
    An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
    + Type: Array

    +
      +
    • message:
      A description of the error.
      + Type: String

      +
    • +
    • path:
      Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
      + Type: Array of Strings

      +
    • +
    +
  • +
  • data:
    This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
    + Type: Object
    +
  • +
+
+
+
+
+
+
+

Queries

+
+

+ getChaosFault +

+
+
+
+
Description
+

Get the fault list from a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a FaultDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosFault(
+  $projectID: ID!,
+  $request: ExperimentRequest!
+) {
+  getChaosFault(
+    projectID: $projectID,
+    request: $request
+  ) {
+    fault
+    engine
+    csv
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ExperimentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosFault": {
+      "fault": "abc123",
+      "engine": "abc123",
+      "csv": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHub +

+
+
+
+
Description
+

Get the details of a requested ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHubStatus! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ chaosHubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHub(
+  $projectID: ID!,
+  $chaosHubID: ID!
+) {
+  getChaosHub(
+    projectID: $projectID,
+    chaosHubID: $chaosHubID
+  ) {
+    id
+    repoURL
+    repoBranch
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "chaosHubID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "isAvailable": true,
+      "totalFaults": "xyz789",
+      "totalExperiments": "xyz789",
+      "name": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "abc123",
+      "isRemoved": false,
+      "sshPrivateKey": "xyz789",
+      "sshPublicKey": "xyz789",
+      "lastSyncedAt": "xyz789",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "createdAt": "abc123",
+      "updatedAt": "xyz789",
+      "description": "xyz789",
+      "isDefault": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHubStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetChaosHubStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHubStats($projectID: ID!) {
+  getChaosHubStats(projectID: $projectID) {
+    totalChaosHubs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"getChaosHubStats": {"totalChaosHubs": 123}}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  getEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "environmentID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getEnvironment": {
+      "projectID": "abc123",
+      "environmentID": "xyz789",
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "type": "PROD",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "xyz789",
+      "isRemoved": true,
+      "infraIDs": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperiment +

+
+
+
+
Description
+

Returns the experiment based on experiment ID

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperiment(
+  $projectID: ID!,
+  $experimentID: String!
+) {
+  getExperiment(
+    projectID: $projectID,
+    experimentID: $experimentID
+  ) {
+    experimentDetails {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+    averageResiliencyScore
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperiment": {
+      "experimentDetails": Experiment,
+      "averageResiliencyScore": 123.45
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRun +

+
+
+
+
Description
+

Returns experiment run based on experiment run ID

+
+
+
+
+
+
+
Response
+

Returns an ExperimentRun! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - ID + +
+ notifyID - ID + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: ID,
+  $notifyID: ID
+) {
+  getExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  ) {
+    projectID
+    experimentRunID
+    experimentType
+    experimentID
+    weightages {
+      faultName
+      weightage
+    }
+    updatedAt
+    createdAt
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+    experimentName
+    experimentManifest
+    phase
+    resiliencyScore
+    faultsPassed
+    faultsFailed
+    faultsAwaited
+    faultsStopped
+    faultsNa
+    totalFaults
+    executionData
+    isRemoved
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+    notifyID
+    runSequence
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "4",
+  "notifyID": 4
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRun": {
+      "projectID": 4,
+      "experimentRunID": 4,
+      "experimentType": "xyz789",
+      "experimentID": 4,
+      "weightages": [Weightages],
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "infra": Infra,
+      "experimentName": "xyz789",
+      "experimentManifest": "xyz789",
+      "phase": "All",
+      "resiliencyScore": 987.65,
+      "faultsPassed": 123,
+      "faultsFailed": 987,
+      "faultsAwaited": 123,
+      "faultsStopped": 123,
+      "faultsNa": 123,
+      "totalFaults": 123,
+      "executionData": "abc123",
+      "isRemoved": false,
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails,
+      "notifyID": 4,
+      "runSequence": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRunStats +

+
+
+
+
Description
+

Query to get experiment run stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentRunStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRunStats($projectID: ID!) {
+  getExperimentRunStats(projectID: $projectID) {
+    totalExperimentRuns
+    totalCompletedExperimentRuns
+    totalTerminatedExperimentRuns
+    totalRunningExperimentRuns
+    totalStoppedExperimentRuns
+    totalErroredExperimentRuns
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRunStats": {
+      "totalExperimentRuns": 123,
+      "totalCompletedExperimentRuns": 987,
+      "totalTerminatedExperimentRuns": 123,
+      "totalRunningExperimentRuns": 123,
+      "totalStoppedExperimentRuns": 123,
+      "totalErroredExperimentRuns": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentStats($projectID: ID!) {
+  getExperimentStats(projectID: $projectID) {
+    totalExperiments
+    totalExpCategorizedByResiliencyScore {
+      id
+      count
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentStats": {
+      "totalExperiments": 987,
+      "totalExpCategorizedByResiliencyScore": [
+        ResilienceScoreCategory
+      ]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getGitOpsDetails +

+
+
+
+
Description
+

Returns the git configuration for gitops

+
+
+
+
+
+
+
Response
+

Returns a GitConfigResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetGitOpsDetails($projectID: ID!) {
+  getGitOpsDetails(projectID: $projectID) {
+    enabled
+    projectID
+    branch
+    repoURL
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getGitOpsDetails": {
+      "enabled": false,
+      "projectID": "xyz789",
+      "branch": "xyz789",
+      "repoURL": "xyz789",
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "xyz789",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getImageRegistry +

+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetImageRegistry($projectID: String!) {
+  getImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "abc123",
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfra +

+
+
+
+
Description
+

Returns infra with a particular infraID in the project

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  getInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfra": {
+      "projectID": "4",
+      "infraID": "4",
+      "name": "abc123",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "environmentID": "xyz789",
+      "platformName": "abc123",
+      "isActive": false,
+      "isInfraConfirmed": true,
+      "isRemoved": false,
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "noOfExperiments": 987,
+      "noOfExperimentRuns": 987,
+      "token": "xyz789",
+      "infraNamespace": "xyz789",
+      "serviceAccount": "xyz789",
+      "infraScope": "abc123",
+      "infraNsExists": true,
+      "infraSaExists": false,
+      "lastExperimentTimestamp": "xyz789",
+      "startTime": "abc123",
+      "version": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraDetails +

+
+
+
+
Description
+

Returns infra details based on identifiers

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraDetails(
+  $infraID: ID!,
+  $projectID: ID!
+) {
+  getInfraDetails(
+    infraID: $infraID,
+    projectID: $projectID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "infraID": "4",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraDetails": {
+      "projectID": "4",
+      "infraID": 4,
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["abc123"],
+      "environmentID": "abc123",
+      "platformName": "abc123",
+      "isActive": true,
+      "isInfraConfirmed": true,
+      "isRemoved": true,
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 987,
+      "token": "abc123",
+      "infraNamespace": "abc123",
+      "serviceAccount": "xyz789",
+      "infraScope": "abc123",
+      "infraNsExists": false,
+      "infraSaExists": false,
+      "lastExperimentTimestamp": "xyz789",
+      "startTime": "abc123",
+      "version": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraManifest +

+
+
+
+
Description
+

Returns the manifest for a given infraID

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ upgrade - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraManifest(
+  $infraID: ID!,
+  $upgrade: Boolean!,
+  $projectID: ID!
+) {
+  getInfraManifest(
+    infraID: $infraID,
+    upgrade: $upgrade,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "infraID": "4",
+  "upgrade": true,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"getInfraManifest": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetInfraStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraStats($projectID: ID!) {
+  getInfraStats(projectID: $projectID) {
+    totalInfrastructures
+    totalActiveInfrastructure
+    totalInactiveInfrastructures
+    totalConfirmedInfrastructure
+    totalNonConfirmedInfrastructures
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraStats": {
+      "totalInfrastructures": 123,
+      "totalActiveInfrastructure": 123,
+      "totalInactiveInfrastructures": 123,
+      "totalConfirmedInfrastructure": 987,
+      "totalNonConfirmedInfrastructures": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getPredefinedExperiment +

+
+
+
+
Description
+

Returns predefined experiment details of selected experiments

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ experimentName - [String!]! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetPredefinedExperiment(
+  $hubID: ID!,
+  $experimentName: [String!]!,
+  $projectID: ID!
+) {
+  getPredefinedExperiment(
+    hubID: $hubID,
+    experimentName: $experimentName,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "hubID": "4",
+  "experimentName": ["abc123"],
+  "projectID": 4
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPredefinedExperiment": [
+      {
+        "experimentName": "xyz789",
+        "experimentCSV": "abc123",
+        "experimentManifest": "abc123"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbe +

+
+
+
+
Description
+

Returns a single Probe based on ProbeName and various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbe": {
+      "projectID": 4,
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["xyz789"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 123,
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeReference +

+
+
+
+
Description
+

Returns all the reference of the Probe based on ProbeName

+
+
+
+
+
+
+
Response
+

Returns a GetProbeReferenceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeReference(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbeReference(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    totalRuns
+    recentExecutions {
+      faultName
+      mode
+      executionHistory {
+        ...ExecutionHistoryFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbeReference": {
+      "projectID": "4",
+      "name": "xyz789",
+      "totalRuns": 987,
+      "recentExecutions": [RecentExecutions]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeYAML +

+
+
+
+
Description
+

Returns the Probe YAML based on ProbeName which can be used in ChaosEngine manifest

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - GetProbeYAMLRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeYAML(
+  $projectID: ID!,
+  $request: GetProbeYAMLRequest!
+) {
+  getProbeYAML(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": GetProbeYAMLRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"getProbeYAML": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbesInExperimentRun +

+
+
+
+
Description
+

Returns all the Probes attached to the requested Experiment Run

+
+
+
+
+
+
+
Response
+

Returns [GetProbesInExperimentRunResponse]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - String! + +
+ faultName - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbesInExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: String!,
+  $faultName: String!
+) {
+  getProbesInExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    faultName: $faultName
+  ) {
+    probe {
+      projectID
+      name
+      description
+      tags
+      type
+      infrastructureType
+      kubernetesHTTPProperties {
+        ...KubernetesHTTPProbeFragment
+      }
+      kubernetesCMDProperties {
+        ...KubernetesCMDProbeFragment
+      }
+      k8sProperties {
+        ...K8SProbeFragment
+      }
+      promProperties {
+        ...PROMProbeFragment
+      }
+      recentExecutions {
+        ...ProbeRecentExecutionsFragment
+      }
+      referencedBy
+      updatedAt
+      createdAt
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+    }
+    mode
+    status {
+      verdict
+      description
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": 4,
+  "experimentRunID": "abc123",
+  "faultName": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbesInExperimentRun": [
+      {
+        "probe": Probe,
+        "mode": "SOT",
+        "status": Status
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getServerVersion +

+
+
+
+
Description
+

Returns version of gql server

+
+
+
+
+
+
+
Response
+

Returns a ServerVersionResponse! +

+
+
+
+

Example

+
+
Query
+ + +
query GetServerVersion {
+  getServerVersion {
+    key
+    value
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getServerVersion": {
+      "key": "xyz789",
+      "value": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getVersionDetails +

+
+
+
+
Description
+

Query to get the latest version of infra available

+
+
+
+
+
+
+
Response
+

Returns an InfraVersionDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetVersionDetails($projectID: ID!) {
+  getVersionDetails(projectID: $projectID) {
+    latestVersion
+    compatibleVersions
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getVersionDetails": {
+      "latestVersion": "abc123",
+      "compatibleVersions": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosFaults +

+
+
+
+
Description
+

List the Charts details of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [Chart!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosFaults(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listChaosFaults(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    apiVersion
+    kind
+    metadata {
+      name
+      version
+      annotations {
+        ...AnnotationFragment
+      }
+    }
+    spec {
+      displayName
+      categoryDescription
+      keywords
+      maturity
+      maintainers {
+        ...MaintainerFragment
+      }
+      minKubeVersion
+      provider {
+        ...ProviderFragment
+      }
+      links {
+        ...LinkFragment
+      }
+      faults {
+        ...FaultListFragment
+      }
+      experiments
+      chaosExpCRDLink
+      platforms
+      chaosType
+    }
+    packageInfo {
+      packageName
+      experiments {
+        ...ExperimentsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosFaults": [
+      {
+        "apiVersion": "xyz789",
+        "kind": "abc123",
+        "metadata": Metadata,
+        "spec": Spec,
+        "packageInfo": PackageInformation
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosHub +

+
+
+
+
Description
+

Lists all the connected ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [ChaosHubStatus]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListChaosHubRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosHub(
+  $projectID: ID!,
+  $request: ListChaosHubRequest
+) {
+  listChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosHub": [
+      {
+        "id": 4,
+        "repoURL": "abc123",
+        "repoBranch": "abc123",
+        "isAvailable": true,
+        "totalFaults": "abc123",
+        "totalExperiments": "abc123",
+        "name": "abc123",
+        "hubType": "GIT",
+        "isPrivate": true,
+        "authType": "BASIC",
+        "token": "xyz789",
+        "userName": "abc123",
+        "password": "abc123",
+        "isRemoved": false,
+        "sshPrivateKey": "xyz789",
+        "sshPublicKey": "xyz789",
+        "lastSyncedAt": "xyz789",
+        "tags": ["abc123"],
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "createdAt": "xyz789",
+        "updatedAt": "xyz789",
+        "description": "abc123",
+        "isDefault": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listEnvironments +

+
+
+
+
Response
+

Returns a ListEnvironmentResponse +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListEnvironments(
+  $projectID: ID!,
+  $request: ListEnvironmentRequest
+) {
+  listEnvironments(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfEnvironments
+    environments {
+      projectID
+      environmentID
+      name
+      description
+      tags
+      type
+      createdAt
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      updatedAt
+      isRemoved
+      infraIDs
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listEnvironments": {
+      "totalNoOfEnvironments": 123,
+      "environments": [Environment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperiment +

+
+
+
+
Description
+

Returns the list of experiments based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperiment(
+  $projectID: ID!,
+  $request: ListExperimentRequest!
+) {
+  listExperiment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperiments
+    experiments {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperiment": {
+      "totalNoOfExperiments": 123,
+      "experiments": [Experiment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperimentRun +

+
+
+
+
Description
+

Returns the list of experiment run based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentRunResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperimentRun(
+  $projectID: ID!,
+  $request: ListExperimentRunRequest!
+) {
+  listExperimentRun(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperimentRuns
+    experimentRuns {
+      projectID
+      experimentRunID
+      experimentType
+      experimentID
+      weightages {
+        ...WeightagesFragment
+      }
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      experimentName
+      experimentManifest
+      phase
+      resiliencyScore
+      faultsPassed
+      faultsFailed
+      faultsAwaited
+      faultsStopped
+      faultsNa
+      totalFaults
+      executionData
+      isRemoved
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+      notifyID
+      runSequence
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRunRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperimentRun": {
+      "totalNoOfExperimentRuns": 987,
+      "experimentRuns": [ExperimentRun]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listImageRegistry +

+
+
+
+
Response
+

Returns [ImageRegistryResponse!] +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListImageRegistry($projectID: String!) {
+  listImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listImageRegistry": [
+      {
+        "isDefault": false,
+        "imageRegistryInfo": ImageRegistry,
+        "imageRegistryID": "xyz789",
+        "projectID": "xyz789",
+        "updatedAt": "xyz789",
+        "createdAt": "abc123",
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "isRemoved": true
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listInfras +

+
+
+
+
Description
+

Returns infras with a particular infra type in the project

+
+
+
+
+
+
+
Response
+

Returns a ListInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListInfraRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListInfras(
+  $projectID: ID!,
+  $request: ListInfraRequest
+) {
+  listInfras(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfInfras
+    infras {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listInfras": {
+      "totalNoOfInfras": 987,
+      "infras": [Infra]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listPredefinedExperiments +

+
+
+
+
Description
+

List the PredefinedExperiments present in the hub

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListPredefinedExperiments(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listPredefinedExperiments(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": 4, "projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listPredefinedExperiments": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "xyz789",
+        "experimentManifest": "abc123"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listProbes +

+
+
+
+
Description
+

Returns the list of Probes based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns [Probe]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infrastructureType - InfrastructureType + +
+ probeNames - [ID!] + +
+ filter - ProbeFilterInput + +
+
+
+
+

Example

+
+
Query
+ + +
query ListProbes(
+  $projectID: ID!,
+  $infrastructureType: InfrastructureType,
+  $probeNames: [ID!],
+  $filter: ProbeFilterInput
+) {
+  listProbes(
+    projectID: $projectID,
+    infrastructureType: $infrastructureType,
+    probeNames: $probeNames,
+    filter: $filter
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infrastructureType": "Kubernetes",
+  "probeNames": ["4"],
+  "filter": ProbeFilterInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listProbes": [
+      {
+        "projectID": 4,
+        "name": "xyz789",
+        "description": "abc123",
+        "tags": ["xyz789"],
+        "type": "httpProbe",
+        "infrastructureType": "Kubernetes",
+        "kubernetesHTTPProperties": KubernetesHTTPProbe,
+        "kubernetesCMDProperties": KubernetesCMDProbe,
+        "k8sProperties": K8SProbe,
+        "promProperties": PROMProbe,
+        "recentExecutions": [ProbeRecentExecutions],
+        "referencedBy": 123,
+        "updatedAt": "abc123",
+        "createdAt": "xyz789",
+        "updatedBy": UserDetails,
+        "createdBy": UserDetails
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ validateUniqueProbe +

+
+
+
+
Description
+

Validates if a probe is already present, returns true if unique

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ValidateUniqueProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  validateUniqueProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"validateUniqueProbe": true}}
+
+ + +
+
+
+
+

Mutations

+
+

+ addChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (includes the git clone operation)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  addChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addChaosHub": {
+      "id": "4",
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "xyz789",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "xyz789",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addProbe +

+
+
+
+
Description
+

Creates a new Probe

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  addProbe(
+    request: $request,
+    projectID: $projectID
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ProbeRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addProbe": {
+      "projectID": "4",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["xyz789"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 987,
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addRemoteChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (remote hub download)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateRemoteChaosHub! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddRemoteChaosHub(
+  $projectID: ID!,
+  $request: CreateRemoteChaosHub!
+) {
+  addRemoteChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateRemoteChaosHub}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addRemoteChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "projectID": "4",
+      "isDefault": false,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "xyz789",
+      "password": "xyz789",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ chaosExperimentRun +

+
+
+
+
Description
+

Creates a new experiment run and sends it to subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - ExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ChaosExperimentRun($request: ExperimentRunRequest!) {
+  chaosExperimentRun(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": ExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"chaosExperimentRun": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ confirmInfraRegistration +

+
+
+
+
Description
+

Confirms the subscriber's registration with the control plane

+
+
+
+
+
+
+
Response
+

Returns a ConfirmInfraRegistrationResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ConfirmInfraRegistration($request: InfraIdentity!) {
+  confirmInfraRegistration(request: $request) {
+    isInfraConfirmed
+    newAccessKey
+    infraID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "confirmInfraRegistration": {
+      "isInfraConfirmed": false,
+      "newAccessKey": "abc123",
+      "infraID": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createChaosExperiment +

+
+
+
+
Description
+

Creates a new experiment and applies its manifest

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  createChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": "4",
+      "cronSyntax": "xyz789",
+      "experimentName": "abc123",
+      "experimentDescription": "abc123",
+      "isCustomExperiment": true,
+      "tags": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateEnvironment(
+  $projectID: ID!,
+  $request: CreateEnvironmentRequest
+) {
+  createEnvironment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createEnvironment": {
+      "projectID": "xyz789",
+      "environmentID": "xyz789",
+      "name": "abc123",
+      "description": "abc123",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "xyz789",
+      "isRemoved": true,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createImageRegistry +

+
+
+
+
Description
+

Create an Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateImageRegistry(
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  createImageRegistry(
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "xyz789",
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosExperiment +

+
+
+
+
Description
+

Removes a experiment from infra

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ experimentRunID - String + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosExperiment(
+  $experimentID: String!,
+  $experimentRunID: String,
+  $projectID: ID!
+) {
+  deleteChaosExperiment(
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "abc123",
+  "experimentRunID": "abc123",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosExperiment": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosHub +

+
+
+
+
Description
+

Delete the ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ hubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosHub(
+  $projectID: ID!,
+  $hubID: ID!
+) {
+  deleteChaosHub(
+    projectID: $projectID,
+    hubID: $hubID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "hubID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosHub": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  deleteEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "environmentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteEnvironment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteImageRegistry +

+
+
+
+
Description
+

Delete the Image Registry

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!
+) {
+  deleteImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "xyz789",
+  "projectID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteImageRegistry": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteInfra +

+
+
+
+
Description
+

Disconnects an infra and deletes its configuration from the control plane

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  deleteInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "infraID": "abc123"}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteInfra": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteProbe +

+
+
+
+
Description
+

Delete a Probe

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ probeName - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteProbe(
+  $probeName: ID!,
+  $projectID: ID!
+) {
+  deleteProbe(
+    probeName: $probeName,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"probeName": 4, "projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteProbe": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ disableGitOps +

+
+
+
+
Description
+

Disables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DisableGitOps($projectID: ID!) {
+  disableGitOps(projectID: $projectID)
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"disableGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ enableGitOps +

+
+
+
+
Description
+

Enables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation EnableGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  enableGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"enableGitOps": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ generateSSHKey +

+
+
+
+
Description
+

Generates Private and Public key for SSH authentication

+
+
+
+
+
+
+
Response
+

Returns an SSHKey! +

+
+
+
+

Example

+
+
Query
+ + +
mutation GenerateSSHKey {
+  generateSSHKey {
+    publicKey
+    privateKey
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "generateSSHKey": {
+      "publicKey": "abc123",
+      "privateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ getManifestWithInfraID +

+
+
+
+
Description
+

Fetches manifest details

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+ accessKey - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GetManifestWithInfraID(
+  $projectID: ID!,
+  $infraID: String!,
+  $accessKey: String!
+) {
+  getManifestWithInfraID(
+    projectID: $projectID,
+    infraID: $infraID,
+    accessKey: $accessKey
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "xyz789",
+  "accessKey": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getManifestWithInfraID": "xyz789"
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ gitopsNotifier +

+
+
+
+
Description
+

Sends workflow run request(single run workflow only) to agent on gitops notification

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ clusterInfo - InfraIdentity! + +
+ experimentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GitopsNotifier(
+  $clusterInfo: InfraIdentity!,
+  $experimentID: ID!
+) {
+  gitopsNotifier(
+    clusterInfo: $clusterInfo,
+    experimentID: $experimentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"clusterInfo": InfraIdentity, "experimentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"gitopsNotifier": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeObj +

+
+
+
+
Description
+

Receives kubernetes object data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeObj($request: KubeObjectData!) {
+  kubeObj(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeObj": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ podLog +

+
+
+
+
Description
+

Receives pod logs for experiments from infra

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLog! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation PodLog($request: PodLog!) {
+  podLog(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLog}
+
+ + +
+
+
Response
+ + +
{"data": {"podLog": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ registerInfra +

+
+
+
+
Description
+

Connect a new infra for a user in a specified project

+
+
+
+
+
+
+
Response
+

Returns a RegisterInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - RegisterInfraRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RegisterInfra(
+  $projectID: ID!,
+  $request: RegisterInfraRequest!
+) {
+  registerInfra(
+    projectID: $projectID,
+    request: $request
+  ) {
+    token
+    infraID
+    name
+    manifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": RegisterInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "registerInfra": {
+      "token": "xyz789",
+      "infraID": "xyz789",
+      "name": "xyz789",
+      "manifest": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ runChaosExperiment +

+
+
+
+
Description
+

Run the chaos experiment (used by frontend)

+
+
+
+
+
+
+
Response
+

Returns a RunChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RunChaosExperiment(
+  $experimentID: String!,
+  $projectID: ID!
+) {
+  runChaosExperiment(
+    experimentID: $experimentID,
+    projectID: $projectID
+  ) {
+    notifyID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"experimentID": "xyz789", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "runChaosExperiment": {"notifyID": "4"}
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosExperiment +

+
+
+
+
Description
+

Saves a new experiment or updates if already exists

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - SaveChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosExperiment(
+  $request: SaveChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  saveChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": SaveChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"saveChaosExperiment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosHub +

+
+
+
+
Description
+

Save a ChaosHub configuration without cloning it

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  saveChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "saveChaosHub": {
+      "id": 4,
+      "repoURL": "abc123",
+      "repoBranch": "xyz789",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": true,
+      "createdAt": "xyz789",
+      "updatedAt": "xyz789",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ stopExperimentRuns +

+
+
+
+
Description
+

stopExperiment will halt all the ongoing runs of a particular experiment

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+ experimentRunID - String + +
+ notifyID - String + +
+
+
+
+

Example

+
+
Query
+ + +
mutation StopExperimentRuns(
+  $projectID: ID!,
+  $experimentID: String!,
+  $experimentRunID: String,
+  $notifyID: String
+) {
+  stopExperimentRuns(
+    projectID: $projectID,
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "abc123",
+  "experimentRunID": "xyz789",
+  "notifyID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"stopExperimentRuns": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ syncChaosHub +

+
+
+
+
Description
+

Sync changes from the Git repository of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ id - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SyncChaosHub(
+  $id: ID!,
+  $projectID: ID!
+) {
+  syncChaosHub(
+    id: $id,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"id": 4, "projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"syncChaosHub": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosExperiment +

+
+
+
+
Description
+

Updates the experiment

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  updateChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": 4,
+      "cronSyntax": "xyz789",
+      "experimentName": "xyz789",
+      "experimentDescription": "xyz789",
+      "isCustomExperiment": true,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosHub +

+
+
+
+
Description
+

Update the configuration of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosHub(
+  $projectID: ID!,
+  $request: UpdateChaosHubRequest!
+) {
+  updateChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": UpdateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosHub": {
+      "id": "4",
+      "repoURL": "abc123",
+      "repoBranch": "abc123",
+      "projectID": 4,
+      "isDefault": false,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "xyz789",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": true,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateCronExperimentState +

+
+
+
+
Description
+

Enable/Disable cron experiment state

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ disable - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateCronExperimentState(
+  $experimentID: String!,
+  $disable: Boolean!,
+  $projectID: ID!
+) {
+  updateCronExperimentState(
+    experimentID: $experimentID,
+    disable: $disable,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "xyz789",
+  "disable": true,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateCronExperimentState": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateEnvironment(
+  $projectID: ID!,
+  $request: UpdateEnvironmentRequest
+) {
+  updateEnvironment(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": UpdateEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"updateEnvironment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateGitOps +

+
+
+
+
Description
+

Updates gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  updateGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"updateGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateImageRegistry +

+
+
+
+
Description
+

Update the Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  updateImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateImageRegistry": {
+      "isDefault": true,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "xyz789",
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateProbe +

+
+
+
+
Description
+

Update the configuration of a Probe

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  updateProbe(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"request": ProbeRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"updateProbe": "abc123"}}
+
+ + +
+
+
+
+

Subscriptions

+
+

+ getInfraEvents +

+
+
+
+
Description
+

Listens infra events from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraEventResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetInfraEvents($projectID: String!) {
+  getInfraEvents(projectID: $projectID) {
+    eventID
+    eventType
+    eventName
+    description
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraEvents": {
+      "eventID": 4,
+      "eventType": "abc123",
+      "eventName": "xyz789",
+      "description": "abc123",
+      "infra": Infra
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeObject +

+
+
+
+
Description
+

Returns a kubernetes object given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeObjectResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeObject($request: KubeObjectRequest!) {
+  getKubeObject(request: $request) {
+    infraID
+    kubeObj {
+      namespace
+      data {
+        ...ObjectDataFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeObject": {
+      "infraID": 4,
+      "kubeObj": [KubeObject]
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getPodLog +

+
+
+
+
Description
+

Returns experiment logs from the pods

+
+
+
+
+
+
+
Response
+

Returns a PodLogResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLogRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetPodLog($request: PodLogRequest!) {
+  getPodLog(request: $request) {
+    experimentRunID
+    podName
+    podType
+    log
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLogRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPodLog": {
+      "experimentRunID": 4,
+      "podName": "xyz789",
+      "podType": "xyz789",
+      "log": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ infraConnect +

+
+
+
+
Description
+

Listens infra operation request from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraActionResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription InfraConnect($request: InfraIdentity!) {
+  infraConnect(request: $request) {
+    projectID
+    action {
+      requestID
+      requestType
+      k8sManifest
+      namespace
+      externalData
+      username
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "infraConnect": {
+      "projectID": "abc123",
+      "action": ActionPayload
+    }
+  }
+}
+
+ + +
+
+
+
+

Types

+
+

ActionPayload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
requestID - String! + +
requestType - String! + +
k8sManifest - String! + +
namespace - String! + +
externalData - String + +
username - String + +
+
+
+
+
+
Example
+ + +
{
+  "requestID": "abc123",
+  "requestType": "abc123",
+  "k8sManifest": "abc123",
+  "namespace": "abc123",
+  "externalData": "xyz789",
+  "username": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Annotation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
categories - String! + +
vendor - String! + +
createdAt - String! + +
repository - String! + +
support - String! + +
chartDescription - String! + +
+
+
+
+
+
Example
+ + +
{
+  "categories": "abc123",
+  "vendor": "xyz789",
+  "createdAt": "xyz789",
+  "repository": "abc123",
+  "support": "xyz789",
+  "chartDescription": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Audit

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
updatedAt - String + +
createdAt - String + +
updatedBy - UserDetails + +
createdBy - UserDetails + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Audit Types
+

ExperimentRun

+
+

RecentExperimentRun

+
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

ImageRegistryResponse

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

AuthType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

BASIC

+
+
+

NONE

+
+
+

SSH

+
+
+

TOKEN

+
+
+
+
+
+
+
Example
+ + +
"BASIC"
+
+ + +
+
+
+
+
+
+ Types +
+

Boolean

+
+
+
+
Description
+

The Boolean scalar type represents true or false.

+
+
+
+
+
+
+
+
+ Types +
+

ChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String + ID of the experiment
+ runExperiment - Boolean + Boolean check indicating if the created scenario will be executed or not
+ experimentManifest - String! + Manifest of the experiment
+ experimentType - ExperimentType + Type of the experiment
+ cronSyntax - String! + Cron syntax of the experiment schedule
+ experimentName - String! + Name of the experiment
+ experimentDescription - String! + Description of the experiment
+ weightages - [WeightagesInput!]! + Array containing weightage and name of each chaos experiment in the experiment
+ isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
+ infraID - ID! + ID of the target infra in which the experiment will run
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "runExperiment": false,
+  "experimentManifest": "abc123",
+  "experimentType": "All",
+  "cronSyntax": "xyz789",
+  "experimentName": "abc123",
+  "experimentDescription": "abc123",
+  "weightages": [WeightagesInput],
+  "isCustomExperiment": true,
+  "infraID": 4,
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentResponse

+
+
+
+
Description
+

Defines the response received for querying the details of chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + ID of the experiment
projectID - ID! + +
cronSyntax - String! + Cron syntax of the experiment schedule
experimentName - String! + Name of the experiment
experimentDescription - String! + Description of the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "projectID": 4,
+  "cronSyntax": "xyz789",
+  "experimentName": "abc123",
+  "experimentDescription": "xyz789",
+  "isCustomExperiment": false,
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the chaos hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
projectID - ID! + ID of the project in which the chaos hub is present
isDefault - Boolean! + Default Hub Identifier
name - String! + Name of the chaos hub
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
description - String + Description of ChaosHub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
isRemoved - Boolean! + Bool value indicating if the chaos hub is removed
createdAt - String! + Timestamp when the chaos hub was created
updatedAt - String! + Timestamp when the chaos hub was last updated
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "xyz789",
+  "repoBranch": "xyz789",
+  "projectID": "4",
+  "isDefault": true,
+  "name": "abc123",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "description": "xyz789",
+  "hubType": "GIT",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789",
+  "isRemoved": false,
+  "createdAt": "abc123",
+  "updatedAt": "xyz789",
+  "lastSyncedAt": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubFilterInput

+
+
+
+
Description
+

Defines filter options for ChaosHub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubName - String + Name of the ChaosHub
+ tags - [String!] + Tags of a chaos hub
+ description - String + Description of a chaos hub
+
+
+
+
+
Example
+ + +
{
+  "chaosHubName": "abc123",
+  "tags": ["abc123"],
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubStatus

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
isAvailable - Boolean! + Bool value indicating whether the hub is available or not.
totalFaults - String! + Total number of experiments in the hub
totalExperiments - String! + Total experiments
name - String! + Name of the chaos hub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
isRemoved - Boolean! + Bool value indicating whether the hub is private or not.
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
sshPublicKey - String + Public SSH key for authenticating into private chaos hub
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
createdAt - String! + Created at timestamp
updatedAt - String! + Updated at timestamp
description - String + Description of ChaosHub
isDefault - Boolean! + Default Hub Identifier
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "abc123",
+  "repoBranch": "abc123",
+  "isAvailable": false,
+  "totalFaults": "abc123",
+  "totalExperiments": "xyz789",
+  "name": "xyz789",
+  "hubType": "GIT",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "xyz789",
+  "isRemoved": true,
+  "sshPrivateKey": "abc123",
+  "sshPublicKey": "abc123",
+  "lastSyncedAt": "abc123",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "createdAt": "xyz789",
+  "updatedAt": "abc123",
+  "description": "abc123",
+  "isDefault": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Chart

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
apiVersion - String! + +
kind - String! + +
metadata - Metadata! + +
spec - Spec! + +
packageInfo - PackageInformation! + +
+
+
+
+
+
Example
+ + +
{
+  "apiVersion": "xyz789",
+  "kind": "xyz789",
+  "metadata": Metadata,
+  "spec": Spec,
+  "packageInfo": PackageInformation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CommonProbeProperties

+
+
+
+
Description
+

Defines the common probe properties shared across different ProbeTypes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + +
CommonProbeProperties Types
+

KubernetesCMDProbe

+
+

PROMProbe

+
+

KubernetesHTTPProbe

+
+

K8SProbe

+
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Comparator

+
+
+
+
Description
+

Defines the properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
type - String! + Type of the Comparator
value - String! + Value of the Comparator
criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "abc123",
+  "value": "abc123",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ComparatorInput

+
+
+
+
Description
+

Defines the input properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ type - String! + Type of the Comparator
+ value - String! + Value of the Comparator
+ criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "xyz789",
+  "value": "abc123",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ConfirmInfraRegistrationResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isInfraConfirmed - Boolean! + +
newAccessKey - String + +
infraID - String + +
+
+
+
+
+
Example
+ + +
{
+  "isInfraConfirmed": false,
+  "newAccessKey": "abc123",
+  "infraID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateChaosHubRequest

+
+
+
+
Description
+

Defines the details required for creating a chaos hub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "tags": ["abc123"],
+  "description": "xyz789",
+  "repoURL": "xyz789",
+  "repoBranch": "xyz789",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "xyz789",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String! + +
+ type - EnvironmentType! + +
+ description - String + +
+ tags - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "abc123",
+  "type": "PROD",
+  "description": "abc123",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateRemoteChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "tags": ["xyz789"],
+  "description": "abc123",
+  "repoURL": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

DateRange

+
+
+
+
Description
+

Defines the start date and end date for the filtering the data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ startDate - String! + Start date
+ endDate - String + End date
+
+
+
+
+
Example
+ + +
{
+  "startDate": "xyz789",
+  "endDate": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Environment

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
environmentID - String! + +
name - String! + +
description - String + +
tags - [String!] + +
type - EnvironmentType! + +
createdAt - String! + +
createdBy - UserDetails + +
updatedBy - UserDetails + +
updatedAt - String! + +
isRemoved - Boolean + +
infraIDs - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "abc123",
+  "environmentID": "abc123",
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "type": "PROD",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "updatedAt": "xyz789",
+  "isRemoved": false,
+  "infraIDs": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the environment
+ description - String + ID of the environment
+ type - EnvironmentType + Type name of environment
+ tags - [String!] + Tags of an environment
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "description": "abc123",
+  "type": "PROD",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - EnvironmentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

PROD

+
+
+

NON_PROD

+
+
+
+
+
+
+
Example
+ + +
"PROD"
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutedByExperiment

+
+
+
+
Description
+

Defines the Executed by which experiment details for Probes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + Experiment ID
experimentName - String! + Experiment Name
updatedAt - Int! + Timestamp at which the experiment was last updated
updatedBy - UserDetails + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "experimentName": "xyz789",
+  "updatedAt": 987,
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutionHistory

+
+
+
+
Description
+

Defines the Execution History of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
mode - Mode! + Probe Mode
faultName - String! + Fault Name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "mode": "SOT",
+  "faultName": "xyz789",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Experiment

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentID - String! + ID of the experiment
experimentType - String + Type of the experiment
experimentManifest - String! + Manifest of the experiment
cronSyntax - String! + Cron syntax of the experiment schedule
name - String! + Name of the experiment
description - String! + Description of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
infra - Infra + Target infra in which the experiment will run
isRemoved - Boolean! + Bool value indicating if the experiment has removed
tags - [String!] + Tags of the experiment
createdBy - UserDetails + User who created the experiment
recentExperimentRunDetails - [RecentExperimentRun] + Array of object containing details of recent experiment runs
updatedBy - UserDetails + Details of the user who updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "experimentID": "abc123",
+  "experimentType": "abc123",
+  "experimentManifest": "abc123",
+  "cronSyntax": "xyz789",
+  "name": "abc123",
+  "description": "abc123",
+  "weightages": [Weightages],
+  "isCustomExperiment": false,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "infra": Infra,
+  "isRemoved": true,
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "recentExperimentRunDetails": [RecentExperimentRun],
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentFilterInput

+
+
+
+
Description
+

Defines filter options for experiments

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraName - String + Name of the infra in which the experiment is running
+ infraID - String + ID of the infra in which the experiment is running
+ infraActive - Boolean + Bool value indicating if Chaos Infrastructure is active
+ scheduleType - ScheduleType + Scenario type of the experiment i.e. CRON or NON_CRON
+ status - String + Status of the latest experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "abc123",
+  "infraName": "abc123",
+  "infraID": "xyz789",
+  "infraActive": false,
+  "scheduleType": "CRON",
+  "status": "abc123",
+  "dateRange": DateRange,
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ category - String! + Name of the chart being used
+ experimentName - String! + Name of the experiment
+ hubID - String! + ID of the hub
+
+
+
+
+
Example
+ + +
{
+  "category": "abc123",
+  "experimentName": "abc123",
+  "hubID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRun

+
+
+
+
Description
+

Defines the details of a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentRunID - ID! + ID of the experiment run which is to be queried
experimentType - String + Type of the experiment
experimentID - ID! + ID of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
updatedAt - String! + Timestamp at which experiment run was last updated
createdAt - String! + Timestamp at which experiment run was created
infra - Infra! + Target infra in which the experiment will run
experimentName - String! + Name of the experiment
experimentManifest - String! + Manifest of the experiment run
phase - ExperimentRunStatus! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
faultsPassed - Int + Number of faults passed
faultsFailed - Int + Number of faults failed
faultsAwaited - Int + Number of faults awaited
faultsStopped - Int + Number of faults stopped
faultsNa - Int + Number of faults which are not available
totalFaults - Int + Total number of faults
executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the faults
isRemoved - Boolean + Bool value indicating if the experiment run has removed
updatedBy - UserDetails + User who has updated the experiment
createdBy - UserDetails + User who has created the experiment run
notifyID - ID + Notify ID of the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "4",
+  "experimentType": "abc123",
+  "experimentID": "4",
+  "weightages": [Weightages],
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "infra": Infra,
+  "experimentName": "xyz789",
+  "experimentManifest": "abc123",
+  "phase": "All",
+  "resiliencyScore": 123.45,
+  "faultsPassed": 987,
+  "faultsFailed": 987,
+  "faultsAwaited": 123,
+  "faultsStopped": 123,
+  "faultsNa": 987,
+  "totalFaults": 123,
+  "executionData": "abc123",
+  "isRemoved": false,
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails,
+  "notifyID": 4,
+  "runSequence": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunFilterInput

+
+
+
+
Description
+

Defines input type for experiment run filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraID - String + Name of the infra infra
+ experimentType - ScheduleType + Type of the experiment
+ experimentStatus - ExperimentRunStatus + Status of the experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ experimentRunID - String + ID of experiment run
+ experimentRunStatus - [String] + Array of experiment run status
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraID": "abc123",
+  "experimentType": "CRON",
+  "experimentStatus": "All",
+  "dateRange": DateRange,
+  "experimentRunID": "abc123",
+  "experimentRunStatus": ["abc123"],
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunRequest

+
+
+
+
Description
+

Defines the details for a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String! + ID of the experiment
+ notifyID - String + notifyID is required to give an ack for non cron experiment execution
+ experimentRunID - String! + ID of the experiment run which is to be queried
+ experimentName - String! + Name of the experiment
+ executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the experiments
+ infraID - InfraIdentity! + ID of the infra infra in which the experiment is running
+ revisionID - String! + ID of the revision which consists manifest details
+ completed - Boolean! + Bool value indicating if the experiment run has completed
+ isRemoved - Boolean + Bool value indicating if the experiment run has removed
+ updatedBy - String! + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "notifyID": "abc123",
+  "experimentRunID": "abc123",
+  "experimentName": "xyz789",
+  "executionData": "xyz789",
+  "infraID": InfraIdentity,
+  "revisionID": "abc123",
+  "completed": false,
+  "isRemoved": true,
+  "updatedBy": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunSortInput

+
+
+
+
Description
+

Defines sorting options for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunStatus

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Running

+
+
+

Completed

+
+
+

Completed_With_Error

+
+
+

Stopped

+
+
+

Skipped

+
+
+

Error

+
+
+

Timeout

+
+
+

Terminated

+
+
+

Queued

+
+
+

NA

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Experiment

+
+
+

CronExperiment

+
+
+

ChaosEngine

+
+
+

ChaosSchedule

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

Experiments

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
CSV - String! + +
desc - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "CSV": "abc123",
+  "desc": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultDetails

+
+
+
+
Description
+

Fault Detail consists of all the fault related details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
fault - String! + fault consists of fault.yaml
engine - String! + engine consists engine.yaml
csv - String! + csv consists chartserviceversion.yaml
+
+
+
+
+
Example
+ + +
{
+  "fault": "abc123",
+  "engine": "abc123",
+  "csv": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
displayName - String! + +
description - String! + +
plan - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "displayName": "xyz789",
+  "description": "xyz789",
+  "plan": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Float

+
+
+
+
Description
+

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

+
+
+
+
+
Example
+ + +
123.45
+
+ + +
+
+
+
+
+
+ Types +
+

GET

+
+
+
+
Description
+

Details of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "abc123",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GETRequest

+
+
+
+
Description
+

Details for input of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "abc123",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetChaosHubStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
totalChaosHubs - Int! + Total number of chaoshubs
+
+
+
+
+
Example
+ + +
{"totalChaosHubs": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentResponse

+
+
+
+
Description
+

Defines the details for a given experiment with some additional data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
experimentDetails - Experiment! + Details of experiment
averageResiliencyScore - Float + Average resiliency score of the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentDetails": Experiment,
+  "averageResiliencyScore": 987.65
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentRunStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperimentRuns - Int! + Total number of experiment runs
totalCompletedExperimentRuns - Int! + Total number of completed experiments runs
totalTerminatedExperimentRuns - Int! + Total number of stopped experiment runs
totalRunningExperimentRuns - Int! + Total number of running experiment runs
totalStoppedExperimentRuns - Int! + Total number of stopped experiment runs
totalErroredExperimentRuns - Int! + Total number of errored experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalExperimentRuns": 987,
+  "totalCompletedExperimentRuns": 987,
+  "totalTerminatedExperimentRuns": 987,
+  "totalRunningExperimentRuns": 987,
+  "totalStoppedExperimentRuns": 987,
+  "totalErroredExperimentRuns": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperiments - Int! + Total number of experiments
totalExpCategorizedByResiliencyScore - [ResilienceScoreCategory]! + Total number of cron experiments
+
+
+
+
+
Example
+ + +
{
+  "totalExperiments": 987,
+  "totalExpCategorizedByResiliencyScore": [
+    ResilienceScoreCategory
+  ]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetInfraStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalInfrastructures - Int! + Total number of infrastructures
totalActiveInfrastructure - Int! + Total number of active infrastructures
totalInactiveInfrastructures - Int! + Total number of inactive infrastructures
totalConfirmedInfrastructure - Int! + Total number of confirmed infrastructures
totalNonConfirmedInfrastructures - Int! + Total number of non confirmed infrastructures
+
+
+
+
+
Example
+ + +
{
+  "totalInfrastructures": 987,
+  "totalActiveInfrastructure": 123,
+  "totalInactiveInfrastructures": 123,
+  "totalConfirmedInfrastructure": 987,
+  "totalNonConfirmedInfrastructures": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeReferenceResponse

+
+
+
+
Description
+

Defines the response of the Probe reference API

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
totalRuns - Int! + Total Runs
recentExecutions - [RecentExecutions]! + Recent Executions of the probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "xyz789",
+  "totalRuns": 123,
+  "recentExecutions": [RecentExecutions]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeYAMLRequest

+
+
+
+
Description
+

Defines the input requests for GetProbeYAML query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeName - ID! + Probe name of the probe
+ mode - Mode! + Mode of the Probe (SoT, EoT, Edge, Continuous or OnChaos)
+
+
+
+
+
Example
+ + +
{"probeName": 4, "mode": "SOT"}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbesInExperimentRunResponse

+
+
+
+
Description
+

Defines the response for Get Probe In Experiment Run Query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probe - Probe! + Probe Object
mode - Mode! + Mode of the probe
status - Status! + Status of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probe": Probe,
+  "mode": "SOT",
+  "status": Status
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfig

+
+
+
+
Description
+

Details of setting a Git repository

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ branch - String! + Git branch where the chaos charts will be pushed and synced
+ repoURL - String! + URL of the Git repository
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token used for private repository
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "branch": "abc123",
+  "repoURL": "xyz789",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfigResponse

+
+
+
+
Description
+

Response received after configuring GitOps

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
enabled - Boolean! + Bool value indicating whether GitOps is enabled or not
projectID - String! + ID of the project where GitOps is configured
branch - String + Git branch where the chaos charts will be pushed and synced
repoURL - String + URL of the Git repository
authType - AuthType + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token used for private repository
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "enabled": true,
+  "projectID": "abc123",
+  "branch": "abc123",
+  "repoURL": "abc123",
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "xyz789",
+  "sshPrivateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

HubType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

GIT

+
+
+

REMOTE

+
+
+
+
+
+
+
Example
+ + +
"GIT"
+
+ + +
+
+
+
+
+
+ Types +
+

ID

+
+
+
+
Description
+

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

+
+
+
+
+
Example
+ + +
4
+
+ + +
+
+
+
+
+
+ Types +
+

INFRA_SCOPE

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

namespace

+
+
+

cluster

+
+
+
+
+
+
+
Example
+ + +
"namespace"
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistry

+
+
+
+
Description
+

Defines details for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryName - String! + Name of Image Registry
imageRepoName - String! + Name of image repository
imageRegistryType - String! + Type of the image registry: public/private
secretName - String + Secret which is used for private registry
secretNamespace - String + Namespace where the secret is available
enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": false,
+  "imageRegistryName": "abc123",
+  "imageRepoName": "xyz789",
+  "imageRegistryType": "abc123",
+  "secretName": "abc123",
+  "secretNamespace": "abc123",
+  "enableRegistry": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryInput

+
+
+
+
Description
+

Defines input data for querying the details of an image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
+ imageRegistryName - String! + Name of Image Registry
+ imageRepoName - String! + Name of image repository
+ imageRegistryType - String! + Type of the image registry: public/private
+ secretName - String + Secret which is used for private registry
+ secretNamespace - String + Namespace where the secret is available
+ enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryName": "xyz789",
+  "imageRepoName": "xyz789",
+  "imageRegistryType": "abc123",
+  "secretName": "xyz789",
+  "secretNamespace": "xyz789",
+  "enableRegistry": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryResponse

+
+
+
+
Description
+

Defines response data for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryInfo - ImageRegistry + Information Image Registry
imageRegistryID - String! + ID of the image registry
projectID - String! + ID of the project in which image registry is created
updatedAt - String + Timestamp when the image registry was last updated
createdAt - String + Timestamp when the image registry was created
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
isRemoved - Boolean + Bool value indicating if the image registry has been removed
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryInfo": ImageRegistry,
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789",
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "isRemoved": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Infra

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
infraID - ID! + ID of the infra
name - String! + Name of the infra
description - String + Description of the infra
tags - [String!] + Tags of the infra
environmentID - String! + Environment ID for the infra
platformName - String! + Infra Platform Name eg. GKE,AWS, Others
isActive - Boolean! + Boolean value indicating if chaos infrastructure is active or not
isInfraConfirmed - Boolean! + Boolean value indicating if chaos infrastructure is confirmed or not
isRemoved - Boolean! + Boolean value indicating if chaos infrastructure is removed or not
updatedAt - String! + Timestamp when the infra was last updated
createdAt - String! + Timestamp when the infra was created
noOfExperiments - Int + Number of schedules created in the infra
noOfExperimentRuns - Int + Number of experiments run in the infra
token - String! + Token used to verify and retrieve the infra manifest
infraNamespace - String + Namespace where the infra is being installed
serviceAccount - String + Name of service account used by infra
infraScope - String! + Scope of the infra : ns or cluster
infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
lastExperimentTimestamp - String + Timestamp of the last experiment run in the infra
startTime - String! + Timestamp when the infra got connected
version - String! + Version of the infra
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
infraType - InfrastructureType + Type of the infrastructure
updateStatus - UpdateStatus! + update status of infra
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "infraID": "4",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "environmentID": "xyz789",
+  "platformName": "xyz789",
+  "isActive": true,
+  "isInfraConfirmed": true,
+  "isRemoved": true,
+  "updatedAt": "xyz789",
+  "createdAt": "abc123",
+  "noOfExperiments": 123,
+  "noOfExperimentRuns": 123,
+  "token": "xyz789",
+  "infraNamespace": "abc123",
+  "serviceAccount": "abc123",
+  "infraScope": "xyz789",
+  "infraNsExists": true,
+  "infraSaExists": true,
+  "lastExperimentTimestamp": "xyz789",
+  "startTime": "xyz789",
+  "version": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "infraType": "Kubernetes",
+  "updateStatus": "AVAILABLE"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraActionResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
action - ActionPayload! + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "xyz789",
+  "action": ActionPayload
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraEventResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
eventID - ID! + +
eventType - String! + +
eventName - String! + +
description - String! + +
infra - Infra! + +
+
+
+
+
+
Example
+ + +
{
+  "eventID": "4",
+  "eventType": "xyz789",
+  "eventName": "xyz789",
+  "description": "abc123",
+  "infra": Infra
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the infra
+ infraID - String + ID of the infra
+ description - String + ID of the infra
+ platformName - String + Platform name of infra
+ infraScope - INFRA_SCOPE + Scope of infra
+ isActive - Boolean + Status of infra
+ tags - [String] + Tags of an infra
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "infraID": "abc123",
+  "description": "xyz789",
+  "platformName": "xyz789",
+  "infraScope": "namespace",
+  "isActive": true,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraIdentity

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - String! + +
+ accessKey - String! + +
+ version - String! + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "abc123",
+  "accessKey": "abc123",
+  "version": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraVersionDetails

+
+
+
+
Description
+

InfraVersionDetails returns the details of compatible infra versions and the latest infra version supported

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
latestVersion - String! + Latest infra version supported
compatibleVersions - [String!]! + List of all infra versions supported
+
+
+
+
+
Example
+ + +
{
+  "latestVersion": "xyz789",
+  "compatibleVersions": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfrastructureType

+
+
+
+
Values
+ + + + + + + + + + + + + +
Enum ValueDescription
+

Kubernetes

+
+
+
+
+
+
+
Example
+ + +
"Kubernetes"
+
+ + +
+
+
+
+
+
+ Types +
+

Int

+
+
+
+
Description
+

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

+
+
+
+
+
Example
+ + +
123
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbe

+
+
+
+
Description
+

Defines the K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
group - String + Group of the Probe
version - String! + Version of the Probe
resource - String! + Resource of the Probe
namespace - String + Namespace of the Probe
resourceNames - String + Resource Names of the Probe
fieldSelector - String + Field Selector of the Probe
labelSelector - String + Label Selector of the Probe
operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "group": "xyz789",
+  "version": "xyz789",
+  "resource": "xyz789",
+  "namespace": "abc123",
+  "resourceNames": "xyz789",
+  "fieldSelector": "xyz789",
+  "labelSelector": "abc123",
+  "operation": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbeRequest

+
+
+
+
Description
+

Defines the input for K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ group - String + Group of the Probe
+ version - String! + Version of the Probe
+ resource - String! + Resource of the Probe
+ namespace - String + Namespace of the Probe
+ resourceNames - String + Resource Names of the Probe
+ fieldSelector - String + Field Selector of the Probe
+ labelSelector - String + Label Selector of the Probe
+ operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "group": "abc123",
+  "version": "xyz789",
+  "resource": "xyz789",
+  "namespace": "abc123",
+  "resourceNames": "abc123",
+  "fieldSelector": "xyz789",
+  "labelSelector": "xyz789",
+  "operation": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeGVRRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ group - String! + +
+ version - String! + +
+ resource - String! + +
+
+
+
+
+
Example
+ + +
{
+  "group": "abc123",
+  "version": "abc123",
+  "resource": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObject

+
+
+
+
Description
+

KubeObject consists of the namespace and the available resources in the same

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
namespace - String! + Namespace of the resource
data - [ObjectData]! + Details of the resource
+
+
+
+
+
Example
+ + +
{
+  "namespace": "xyz789",
+  "data": [ObjectData]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectData

+
+
+
+
Description
+

Defines the details of Kubernetes object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes object details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes object is present
+ kubeObj - String! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "requestID": 4,
+  "infraID": InfraIdentity,
+  "kubeObj": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes object data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra in which the Kubernetes object is present
+ kubeObjRequest - KubeGVRRequest + GVR Request
+ objectType - String! + +
+ workloads - [Workload] + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "kubeObjRequest": KubeGVRRequest,
+  "objectType": "xyz789",
+  "workloads": [Workload]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes object is present
kubeObj - [KubeObject]! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "kubeObj": [KubeObject]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbe

+
+
+
+
Description
+

Defines the CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
command - String! + Command of the Probe
comparator - Comparator! + Comparator of the Probe
source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "command": "abc123",
+  "comparator": Comparator,
+  "source": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ command - String! + Command of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+ source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "command": "xyz789",
+  "comparator": ComparatorInput,
+  "source": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbe

+
+
+
+
Description
+

Defines the Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
url - String! + URL of the Probe
method - Method! + HTTP method of the Probe
insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "url": "abc123",
+  "method": Method,
+  "insecureSkipVerify": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ url - String! + URL of the Probe
+ method - MethodRequest! + HTTP method of the Probe
+ insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "url": "xyz789",
+  "method": MethodRequest,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+ +
+
+ Types +
+

ListChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubIDs - [ID!] + Array of ChaosHub IDs for which details will be fetched
+ filter - ChaosHubFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{"chaosHubIDs": [4], "filter": ChaosHubFilterInput}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - EnvironmentFilterInput + Details for fetching filtered data
+ sort - EnvironmentSortInput + Details for fetching sorted data
+
+
+
+
+
Example
+ + +
{
+  "environmentIDs": ["4"],
+  "pagination": Pagination,
+  "filter": EnvironmentFilterInput,
+  "sort": EnvironmentSortInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfEnvironments - Int! + Total number of environment
environments - [Environment] + +
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfEnvironments": 987,
+  "environments": [Environment]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRequest

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentSortInput + Details for fetching sorted data
+ filter - ExperimentFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentIDs": [4],
+  "pagination": Pagination,
+  "sort": ExperimentSortInput,
+  "filter": ExperimentFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentResponse

+
+
+
+
Description
+

Defines the details for a experiment with total experiment count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperiments - Int! + Total number of experiments
experiments - [Experiment]! + Details related to the experiments
+
+
+
+
+
Example
+ + +
{"totalNoOfExperiments": 123, "experiments": [Experiment]}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunRequest

+
+
+
+
Description
+

Defines the details for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentRunIDs - [ID] + Array of experiment run IDs for which details will be fetched
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentRunSortInput + Details for fetching sorted data
+ filter - ExperimentRunFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentRunIDs": [4],
+  "experimentIDs": [4],
+  "pagination": Pagination,
+  "sort": ExperimentRunSortInput,
+  "filter": ExperimentRunFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunResponse

+
+
+
+
Description
+

Defines the details of a experiment to sent as response

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperimentRuns - Int! + Total number of experiment runs
experimentRuns - [ExperimentRun]! + Defines details of experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfExperimentRuns": 987,
+  "experimentRuns": [ExperimentRun]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraRequest

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraIDs - [ID!] + Array of infra IDs for which details will be fetched
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - InfraFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "infraIDs": [4],
+  "environmentIDs": ["4"],
+  "pagination": Pagination,
+  "filter": InfraFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraResponse

+
+
+
+
Description
+

Defines the details for a infras with total infras count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfInfras - Int! + Total number of infras
infras - [Infra]! + Details related to the infras
+
+
+
+
+
Example
+ + +
{"totalNoOfInfras": 987, "infras": [Infra]}
+
+ + +
+
+
+
+
+
+ Types +
+

Maintainer

+
+
+
+
Description
+

Defines the details of the maintainer

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the maintainer
email - String! + Email of the maintainer
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Metadata

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
version - String! + +
annotations - Annotation! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "version": "xyz789",
+  "annotations": Annotation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Method

+
+
+
+
Description
+

Defines the methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
get - GET + A GET request
post - POST + A POST request
+
+
+
+
+
Example
+ + +
{"get": GET, "post": POST}
+
+ + +
+
+
+
+
+
+ Types +
+

MethodRequest

+
+
+
+
Description
+

Defines the input for methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ get - GETRequest + A GET request
+ post - POSTRequest + A POST request
+
+
+
+
+
Example
+ + +
{
+  "get": GETRequest,
+  "post": POSTRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Mode

+
+
+
+
Description
+

Defines the different modes of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

SOT

+
+
+

EOT

+
+
+

Edge

+
+
+

Continuous

+
+
+

OnChaos

+
+
+
+
+
+
+
Example
+ + +
"SOT"
+
+ + +
+
+
+
+
+
+ Types +
+

ObjectData

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
labels - [String!] + Labels present in the resource
name - String! + Name of the resource
+
+
+
+
+
Example
+ + +
{
+  "labels": ["xyz789"],
+  "name": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POST

+
+
+
+
Description
+

Details of POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
contentType - String + Content Type of the request
body - String + Body of the request
bodyPath - String + Body Path of the HTTP body required for the http post request
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "xyz789",
+  "body": "abc123",
+  "bodyPath": "abc123",
+  "criteria": "abc123",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POSTRequest

+
+
+
+
Description
+

Details for input of the POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ contentType - String + Content Type of the request
+ body - String + Body of the request
+ bodyPath - String + Body Path of the request for Body
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "xyz789",
+  "body": "xyz789",
+  "bodyPath": "xyz789",
+  "criteria": "xyz789",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbe

+
+
+
+
Description
+

Defines the PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
endpoint - String! + Endpoint of the Probe
query - String + Query of the Probe
queryPath - String + Query path of the Probe
comparator - Comparator! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "endpoint": "abc123",
+  "query": "xyz789",
+  "queryPath": "abc123",
+  "comparator": Comparator
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbeRequest

+
+
+
+
Description
+

Defines the input for PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ endpoint - String! + Endpoint of the Probe
+ query - String + Query of the Probe
+ queryPath - String + Query path of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "endpoint": "xyz789",
+  "query": "abc123",
+  "queryPath": "xyz789",
+  "comparator": ComparatorInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PackageInformation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
packageName - String! + +
experiments - [Experiments!]! + +
+
+
+
+
+
Example
+ + +
{
+  "packageName": "abc123",
+  "experiments": [Experiments]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Pagination

+
+
+
+
Description
+

Defines data required to fetch paginated data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ page - Int! + Page number for which data will be fetched
+ limit - Int! + Number of data to be fetched
+
+
+
+
+
Example
+ + +
{"page": 987, "limit": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLog

+
+
+
+
Description
+

Response received for querying pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - InfraIdentity! + ID of the cluster
+ requestID - ID! + Unique request ID of a particular node which is being queried
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podType - String! + Type of the pod: chaosengine
+ log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "infraID": InfraIdentity,
+  "requestID": "4",
+  "experimentRunID": "4",
+  "podName": "abc123",
+  "podType": "xyz789",
+  "log": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogRequest

+
+
+
+
Description
+

Defines the details for fetching the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the cluster
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podNamespace - String! + Namespace where the pod is running
+ podType - String! + Type of the pod: chaosEngine or not pod
+ expPod - String + Name of the experiment pod fetched from execution data
+ runnerPod - String + Name of the runner pod fetched from execution data
+ chaosNamespace - String + Namespace where the experiment is executing
+
+
+
+
+
Example
+ + +
{
+  "infraID": 4,
+  "experimentRunID": "4",
+  "podName": "xyz789",
+  "podNamespace": "abc123",
+  "podType": "xyz789",
+  "expPod": "abc123",
+  "runnerPod": "xyz789",
+  "chaosNamespace": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogResponse

+
+
+
+
Description
+

Defines the response received for querying querying the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
podName - String! + Name of the pod for which logs are queried
podType - String! + Type of the pod: chaosengine
log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "podName": "abc123",
+  "podType": "xyz789",
+  "log": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PredefinedExperimentList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentName - String! + Name of the experiment
experimentCSV - String! + Experiment CSV
experimentManifest - String! + Experiment Manifest
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "experimentCSV": "xyz789",
+  "experimentManifest": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Probe

+
+
+
+
Description
+

Defines the details of the Probe entity

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
description - String + Description of the Probe
tags - [String!] + Tags of the Probe
type - ProbeType! + Type of the Probe [From list of ProbeType enum]
infrastructureType - InfrastructureType! + Infrastructure type of the Probe
kubernetesHTTPProperties - KubernetesHTTPProbe + Kubernetes HTTP Properties of the specific type of the Probe
kubernetesCMDProperties - KubernetesCMDProbe + Kubernetes CMD Properties of the specific type of the Probe
k8sProperties - K8SProbe + K8S Properties of the specific type of the Probe
promProperties - PROMProbe + PROM Properties of the specific type of the Probe
recentExecutions - [ProbeRecentExecutions!] + All execution histories of the probe
referencedBy - Int + Referenced by how many faults
updatedAt - String! + Timestamp at which the Probe was last updated
createdAt - String! + Timestamp at which the Probe was created
updatedBy - UserDetails + User who has updated the Probe
createdBy - UserDetails + User who has created the Probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbe,
+  "kubernetesCMDProperties": KubernetesCMDProbe,
+  "k8sProperties": K8SProbe,
+  "promProperties": PROMProbe,
+  "recentExecutions": [ProbeRecentExecutions],
+  "referencedBy": 987,
+  "updatedAt": "xyz789",
+  "createdAt": "abc123",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeFilterInput

+
+
+
+
Description
+

Defines the input for Probe filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the Probe
+ dateRange - DateRange + Date range for filtering purpose
+ type - [ProbeType] + Type of the Probe [From list of ProbeType enum]
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "dateRange": DateRange,
+  "type": ["httpProbe"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of global probe in ListProbe API with different fault and execution history each time

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "faultName": "abc123",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRequest

+
+
+
+
Description
+

Defines the details required for creating a Chaos Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - ID! + Name of the Probe
+ description - String + Description of the Probe
+ tags - [String!] + Tags of the Probe
+ type - ProbeType! + Type of the Probe [From list of ProbeType enum]
+ infrastructureType - InfrastructureType! + Infrastructure type of the Probe
+ kubernetesHTTPProperties - KubernetesHTTPProbeRequest + HTTP Properties of the specific type of the Probe
+ kubernetesCMDProperties - KubernetesCMDProbeRequest + CMD Properties of the specific type of the Probe
+ k8sProperties - K8SProbeRequest + K8S Properties of the specific type of the Probe
+ promProperties - PROMProbeRequest + PROM Properties of the specific type of the Probe
+
+
+
+
+
Example
+ + +
{
+  "name": "4",
+  "description": "abc123",
+  "tags": ["xyz789"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbeRequest,
+  "kubernetesCMDProperties": KubernetesCMDProbeRequest,
+  "k8sProperties": K8SProbeRequest,
+  "promProperties": PROMProbeRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeType

+
+
+
+
Description
+

Defines the different types of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

httpProbe

+
+
+

cmdProbe

+
+
+

promProbe

+
+
+

k8sProbe

+
+
+
+
+
+
+
Example
+ + +
"httpProbe"
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeVerdict

+
+
+
+
Description
+

Defines the older different statuses of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

Passed

+
+
+

Failed

+
+
+

NA

+
+
+

Awaited

+
+
+
+
+
+
+
Example
+ + +
"Passed"
+
+ + +
+
+
+
+
+
+ Types +
+

Provider

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + +
+
+
+
+
+
Example
+ + +
{"name": "xyz789"}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
mode - Mode! + Probe mode
executionHistory - [ExecutionHistory!]! + Execution History
+
+
+
+
+
Example
+ + +
{
+  "faultName": "xyz789",
+  "mode": "SOT",
+  "executionHistory": [ExecutionHistory]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExperimentRun

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
phase - String! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
createdBy - UserDetails + User who created the experiment run
updatedBy - UserDetails + User who updated the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": 4,
+  "phase": "abc123",
+  "resiliencyScore": 987.65,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "runSequence": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraRequest

+
+
+
+
Description
+

Defines the details for the new infra being connected

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the infra
+ environmentID - String! + Environment ID for the infra
+ infrastructureType - InfrastructureType! + Type of Infra : internal/external
+ description - String + Description of the infra
+ platformName - String! + Infra Platform Name eg. GKE,AWS, Others
+ infraNamespace - String + Namespace where the infra is being installed
+ serviceAccount - String + Name of service account used by infra
+ infraScope - String! + Scope of the infra : ns or infra
+ infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
+ infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
+ skipSsl - Boolean + Bool value indicating whether infra will skip ssl checks or not
+ nodeSelector - String + Node selectors used by infra
+ tolerations - [Toleration] + Node tolerations used by infra
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "environmentID": "abc123",
+  "infrastructureType": "Kubernetes",
+  "description": "xyz789",
+  "platformName": "xyz789",
+  "infraNamespace": "xyz789",
+  "serviceAccount": "xyz789",
+  "infraScope": "xyz789",
+  "infraNsExists": false,
+  "infraSaExists": true,
+  "skipSsl": true,
+  "nodeSelector": "abc123",
+  "tolerations": [Toleration],
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraResponse

+
+
+
+
Description
+

Response received for registering a new infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
token - String! + Token used to verify and retrieve the infra manifest
infraID - String! + Unique ID for the newly registered infra
name - String! + Infra name as sent in request
manifest - String! + Infra Manifest
+
+
+
+
+
Example
+ + +
{
+  "token": "xyz789",
+  "infraID": "xyz789",
+  "name": "xyz789",
+  "manifest": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ResilienceScoreCategory

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
id - Int! + Lower bound of the range(inclusive)
count - Int! + total experiments with avg resilience score between lower bound and upper bound(exclusive)
+
+
+
+
+
Example
+ + +
{"id": 987, "count": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

ResourceDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
description - String + +
tags - [String!] + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceDetails Types
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "description": "abc123",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RunChaosExperimentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
notifyID - ID! + +
+
+
+
+
+
Example
+ + +
{"notifyID": 4}
+
+ + +
+
+
+
+
+
+ Types +
+

SSHKey

+
+
+
+
Description
+

Defines the SSHKey details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
publicKey - String! + Public SSH key authenticating into git repository
privateKey - String! + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "publicKey": "xyz789",
+  "privateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

SaveChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the experiment
+ type - ExperimentType + Type of the experiment
+ name - String! + Name of the experiment
+ description - String! + Description of the experiment
+ manifest - String! + Manifest of the experiment
+ infraID - ID! + ID of the target infrastructure in which the experiment will run
+ tags - [String!] + Tags of the infrastructure
+
+
+
+
+
Example
+ + +
{
+  "id": "abc123",
+  "type": "All",
+  "name": "abc123",
+  "description": "xyz789",
+  "manifest": "xyz789",
+  "infraID": "4",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ScheduleType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

CRON

+
+
+

NON_CRON

+
+
+

ALL

+
+
+
+
+
+
+
Example
+ + +
"CRON"
+
+ + +
+
+
+
+
+
+ Types +
+

ServerVersionResponse

+
+
+
+
Description
+

Response received for fetching GQL server version

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
key - String! + Returns server version key
value - String! + Returns server version value
+
+
+
+
+
Example
+ + +
{
+  "key": "abc123",
+  "value": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Spec

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
displayName - String! + +
categoryDescription - String! + +
keywords - [String!]! + +
maturity - String! + +
maintainers - [Maintainer!]! + +
minKubeVersion - String! + +
provider - Provider! + +
links - [Link!]! + +
faults - [FaultList!]! + +
experiments - [String!] + +
chaosExpCRDLink - String! + +
platforms - [String!]! + +
chaosType - String + +
+
+
+
+
+
Example
+ + +
{
+  "displayName": "xyz789",
+  "categoryDescription": "xyz789",
+  "keywords": ["xyz789"],
+  "maturity": "abc123",
+  "maintainers": [Maintainer],
+  "minKubeVersion": "xyz789",
+  "provider": Provider,
+  "links": [Link],
+  "faults": [FaultList],
+  "experiments": ["abc123"],
+  "chaosExpCRDLink": "abc123",
+  "platforms": ["abc123"],
+  "chaosType": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Status

+
+
+
+
Description
+

Status defines whether a probe is pass or fail

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
verdict - ProbeVerdict! + Verdict defines the verdict of the probe, range: Passed, Failed, N/A
description - String + Description defines the description of probe status
+
+
+
+
+
Example
+ + +
{
+  "verdict": "Passed",
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

String

+
+
+
+
Description
+

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

+
+
+
+
+
Example
+ + +
"xyz789"
+
+ + +
+
+
+
+
+
+ Types +
+

Toleration

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ tolerationSeconds - Int + +
+ key - String + +
+ operator - String + +
+ effect - String + +
+ value - String + +
+
+
+
+
+
Example
+ + +
{
+  "tolerationSeconds": 123,
+  "key": "xyz789",
+  "operator": "xyz789",
+  "effect": "xyz789",
+  "value": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the chaos hub
+ name - String! + Name of the chaos hub
+ description - String + Description of the infra
+ tags - [String!] + Tags of the infra
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "id": "abc123",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "repoURL": "xyz789",
+  "repoBranch": "abc123",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String + +
+ description - String + +
+ tags - [String] + +
+ type - EnvironmentType + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "abc123",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "type": "PROD"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateStatus

+
+
+
+
Description
+

UpdateStatus represents if infra needs to be updated

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

AVAILABLE

+
+
+

MANDATORY

+
+
+

NOT_REQUIRED

+
+
+
+
+
+
+
Example
+ + +
"AVAILABLE"
+
+ + +
+
+
+
+
+
+ Types +
+

UserDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
userID - String! + +
username - String! + +
email - String! + +
+
+
+
+
+
Example
+ + +
{
+  "userID": "abc123",
+  "username": "xyz789",
+  "email": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Weightages

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Name of the fault
weightage - Int! + Weightage of the experiment
+
+
+
+
+
Example
+ + +
{"faultName": "abc123", "weightage": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

WeightagesInput

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ faultName - String! + Name of the fault
+ weightage - Int! + Weightage of the fault
+
+
+
+
+
Example
+ + +
{"faultName": "abc123", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

Workload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + +
+ kind - String! + +
+ namespace - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "kind": "abc123",
+  "namespace": "abc123"
+}
+
+ + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.x/config.yml b/mkdocs/docs/graphql/v3.10.x/config.yml new file mode 100644 index 00000000000..8227cec250b --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.x/config.yml @@ -0,0 +1,33 @@ +spectaql: + targetDir: ./mkdocs/docs/graphql/v3.10.x + logoFile: ./mkdocs/docs/graphql/logo.png + faviconFile: ./mkdocs/docs/graphql/logo.png + displayAllServers: true + themeDir: ./mkdocs/docs/graphql/v3.10.x/custom-theme + +introspection: + removeTrailingPeriodFromDescriptions: false + schemaFile: ./chaoscenter/graphql/definitions/shared/*.graphqls + queryNameStrategy: capitalizeFirst + fieldExpansionDepth: 2 + + spectaqlDirective: + enable: true + +extensions: + graphqlScalarExamples: true + +info: + title: ChaosCenter API Documentation + description: Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform. + + x-introItems: + - title: Common Error Response + file: ./mkdocs/docs/graphql/v3.10.x/error_response_guide.md + +servers: + - url: http://localhost:8080 + description: Dev + - url: http://localhost:8080/query + description: Prod + production: true diff --git a/mkdocs/docs/graphql/v3.10.x/custom-theme/stylesheets/custom.scss b/mkdocs/docs/graphql/v3.10.x/custom-theme/stylesheets/custom.scss new file mode 100644 index 00000000000..68e1aa2268c --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.x/custom-theme/stylesheets/custom.scss @@ -0,0 +1,24 @@ + +$line-height-heading: 1.2; +$font-size-large-heading: 1.7105263158rem; +$font-weight-large-heading: 700; +$content-padding: 20px; +$text-color: #535b60; +$text-weight: 400; +$text-size: 1.5789473684rem; + +#spectaql { + h2 { + color: $text-color; + font-weight: $text-weight; + font-size: $text-size; + } + + .doc-heading { + line-height: $line-height-heading; + font-size: $font-size-large-heading; + font-weight: $font-weight-large-heading; + color: #535b60 + } + +} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.x/error_response_guide.md b/mkdocs/docs/graphql/v3.10.x/error_response_guide.md new file mode 100644 index 00000000000..76e4ab30fce --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.x/error_response_guide.md @@ -0,0 +1,29 @@ +All error responses follow the structure outlined below. + +```json +{ + "errors": [ + { + "message": "Error message", + "path": [ + "Request path" + ] + } + ], + "data": {} +} +``` + +### Field Descriptions: +- **errors**:
+ An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
+ **Type: `Array`**

+ - **message**:
+ A description of the error.
+ **Type: `String`**

+ - **path**:
+ Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
+ **Type: `Array of Strings`**

+- **data**:
+ This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
+ **Type: `Object`**
diff --git a/mkdocs/docs/graphql/v3.10.x/images/favicon.png b/mkdocs/docs/graphql/v3.10.x/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.10.x/images/logo.png b/mkdocs/docs/graphql/v3.10.x/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.10.x/javascripts/spectaql.min.js b/mkdocs/docs/graphql/v3.10.x/javascripts/spectaql.min.js new file mode 100644 index 00000000000..6ef3202c222 --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.x/javascripts/spectaql.min.js @@ -0,0 +1 @@ +function scrollSpy(){var l=5,e=document.querySelector("html"),c=(e&&(e=window.getComputedStyle(e).scrollPaddingTop)&&"string"==typeof e&&"auto"!==e&&e.endsWith("px")&&(l+=parseInt(e.split("px")[0])),"nav-scroll-active"),i=null,d=[];function t(){i=null;var e=document.querySelectorAll("[data-traverse-target]");Array.prototype.forEach.call(e,function(e){d.push({id:e.id,top:e.offsetTop})})}var n=debounce(function(){t(),o()},500),o=debounce(function(){var e,t,n,o,r=(e=>{for(var t=e+l,n=0;n=d[n].top&&(!o||t{toggleMenu(),scrollSpy()}); \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.10.x/stylesheets/spectaql.min.css b/mkdocs/docs/graphql/v3.10.x/stylesheets/spectaql.min.css new file mode 100644 index 00000000000..e7666ab6b36 --- /dev/null +++ b/mkdocs/docs/graphql/v3.10.x/stylesheets/spectaql.min.css @@ -0,0 +1 @@ +#spectaql h2{color:#535b60;font-weight:400;font-size:1.5789473684rem}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;font-weight:700;color:#535b60}#spectaql{padding:0;margin:0}#spectaql pre{overflow:auto;margin-top:0;margin-bottom:20px}#spectaql pre code{display:block;background:#ccc}#spectaql table{width:100%;table-layout:fixed;text-align:left;border-collapse:collapse}#spectaql table td,#spectaql table th{margin:0;padding:0}#spectaql #introduction .example-section>*,#spectaql .definition-heading,#spectaql .doc-heading,#spectaql .introduction-item-title,#spectaql .operation-heading{overflow:hidden;text-overflow:ellipsis}#spectaql #page{display:flex}#spectaql #page *{box-sizing:border-box}#spectaql #page.drawer-open #sidebar{z-index:1000;transform:translateX(0)}#spectaql #page.drawer-open .drawer-overlay{display:block;background:rgba(0,0,0,.5);z-index:10}#spectaql #sidebar{position:fixed;min-width:250px;max-width:250px;flex-shrink:0;transition:transform .2s ease-out;transform:translateX(-100%);z-index:10;padding-top:20px;background:#fff}@media (min-width:48em){#spectaql #sidebar{position:relative;transform:none}}@media (min-width:64em){#spectaql #sidebar{min-width:300px;max-width:300px}}#spectaql .sidebar-top-container{display:flex;align-items:center;padding:0 20px}#spectaql #mobile-navbar{display:flex;align-items:center;position:sticky;top:0}@media (min-width:48em){#spectaql #mobile-navbar{display:none}}#spectaql .sidebar-open-button{display:flex;align-items:flex-start;margin:0;padding:0;border:none;background:0 0}#spectaql .sidebar-open-button .hamburger{width:16px;height:14px;cursor:pointer}#spectaql .sidebar-open-button .hamburger::after{display:block;content:"";height:2px;background:#535b60;box-shadow:0 5px 0 #535b60,0 10px 0 #535b60}#spectaql .sidebar-open-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .close-button{display:block}#spectaql .close-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width:48em){#spectaql .close-button{display:none}}#spectaql .drawer-overlay{display:none;position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0)}@media (min-width:48em){#spectaql .drawer-overlay{display:none!important}}#spectaql #nav{display:flex;flex-direction:column;max-height:calc(100vh - 0px);padding:0 20px;padding-bottom:20px;position:sticky;top:0;overflow:auto}#spectaql #logo{margin-right:auto}#spectaql #logo img{display:block;width:100%;max-width:100%}#spectaql .nav-group-items,#spectaql .nav-group-section-items{padding:0;margin:0}#spectaql .nav-group-items>li,#spectaql .nav-group-section-items>li{list-style:none}#spectaql .nav-group-items .nav-group-section-title,#spectaql .nav-group-items>li,#spectaql .nav-group-section-items .nav-group-section-title,#spectaql .nav-group-section-items>li{overflow:hidden;text-overflow:ellipsis}#spectaql .nav-group-section-items{display:none}#spectaql .nav-scroll-expand .nav-group-section-items{display:block}#spectaql #docs{position:relative;margin:0 auto;min-width:100px;max-width:88em;flex-grow:1;flex-shrink:1;padding:20px}@media (min-width:48em){#spectaql .doc-row{display:flex;flex-wrap:wrap}}#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:100%}@media (min-width:48em){#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:50%}}@media (min-width:48em){#spectaql .doc-row .doc-copy{padding-right:20px}}@media (min-width:48em){#spectaql .doc-row .doc-examples{padding-left:20px}}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e}#spectaql{font-family:-apple-system,BlinkMacSystemFont,system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.6;background:#fff;color:#535b60}@media (min-width:32em){#spectaql{font-size:16px}}#spectaql a{color:#0298bf;text-decoration:none}#spectaql a:hover{color:#0182a2}#spectaql a:active,#spectaql a:focus{color:#0298bf}#spectaql code{font-size:.875em;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}#spectaql pre{color:#fff}#spectaql pre code{background:#222}#spectaql pre code,#spectaql pre code.hljs{font-size:.82em;line-height:1.4;padding:15px 20px}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;margin-top:10px}@media (min-width:48em){#spectaql .doc-heading{margin-top:-10px}}#spectaql .close-button{background:0 0;border:none;padding:5px;font-size:16px;font-weight:700;color:#535b60}#spectaql #introduction{margin-bottom:60px}#spectaql #introduction .example-section:not(.example-section-is-code){margin-bottom:20px}#spectaql #introduction .example-section:not(.example-section-is-code) h5,#spectaql #introduction .example-section:not(.example-section-is-code) p{margin:0;font-size:1em}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:20px;padding-bottom:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:30px;padding-bottom:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:40px;padding-bottom:40px}}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:20px;padding-right:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:30px;padding-right:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:50px;padding-right:50px}}#spectaql #sidebar{padding-bottom:0;background:#fff}#spectaql #sidebar a{color:#535b60}#spectaql #sidebar a.nav-scroll-active,#spectaql #sidebar a:hover{font-weight:700}#spectaql #sidebar a.nav-scroll-active{color:#535b60}#spectaql #sidebar a:hover{color:#0182a2}@media (min-width:48em){#spectaql #sidebar{border-right:2px solid #d8d8d8}}#spectaql #mobile-navbar{background:#fff;margin-top:-20px;margin-left:-20px;margin-right:-20px}@media (min-width:32em){#spectaql #mobile-navbar{margin-top:-30px;margin-left:-30px;margin-right:-30px}}#spectaql #mobile-navbar .sidebar-open-button::after{display:block;content:"All Topics";margin-left:10px;color:#535b60}#spectaql #nav .nav-group{margin-top:20px}#spectaql #nav .nav-group li{margin-bottom:5px}#spectaql #nav .nav-group-title{font-size:.875em;font-weight:400;margin:0 0 6px 0;color:#999}#spectaql #nav .nav-group-section-title{font-size:inherit;margin:0;margin-bottom:5px;font-weight:400}#spectaql #nav .nav-group-section-items{margin-left:.75em}#spectaql .definition,#spectaql .operation{margin-bottom:60px}#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.72em}#spectaql .definition .definition-heading code,#spectaql .definition .operation-heading code,#spectaql .operation .definition-heading code,#spectaql .operation .operation-heading code{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:32em){#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.7105263158rem}}#spectaql .definition-group-name,#spectaql .group-heading,#spectaql .operation-group-name{border-top:2px solid #d8d8d8;padding-top:3px;color:#999;font-size:inherit;font-weight:inherit}#spectaql .definition-group-name a,#spectaql .group-heading a,#spectaql .operation-group-name a{color:#999}#spectaql .definition-group-name a:hover,#spectaql .group-heading a:hover,#spectaql .operation-group-name a:hover{font-weight:700}#spectaql .doc-examples{margin-top:20px}#spectaql .doc-examples .example-heading{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .doc-examples .example-section-is-code h5{color:#999;text-transform:uppercase;background:#000;font-size:.75em;font-weight:700;padding:.6em 0 .6em 20px;margin:0;opacity:1}@media (min-width:48em){#spectaql .doc-examples{margin-top:0}}#spectaql .doc-copy p{margin:0 0 20px 0}#spectaql .doc-copy p:last-child{margin-bottom:0}#spectaql .doc-copy table tr th{font-weight:400;border-bottom:2px solid #d8d8d8}#spectaql .doc-copy table tr td{border-bottom:1px solid #e0e0e0}#spectaql .doc-copy table tr.row-has-field-arguments td,#spectaql .doc-copy table tr:last-child td{border-bottom:none}#spectaql .doc-copy table tr td,#spectaql .doc-copy table tr th{padding:5px}#spectaql .doc-copy table tr td:first-child,#spectaql .doc-copy table tr th:first-child{padding-left:0}#spectaql .doc-copy table tr td:last-child,#spectaql .doc-copy table tr th:last-child{padding-right:0}#spectaql .doc-copy .doc-copy-section{margin-bottom:30px}#spectaql .doc-copy .doc-copy-section>h5{margin:0 0 5px 0;font-size:inherit;font-weight:inherit;color:#999}#spectaql .doc-copy .definition-description>h5,#spectaql .doc-copy .definition-properties>h5,#spectaql .doc-copy .operation-description>h5{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .field-arguments{font-size:.875em;background-color:#fafbfc;border:1px solid #e0e0e0;padding:10px;margin-bottom:5px}#spectaql .field-arguments p{margin:10px 0 0 0}#spectaql .field-arguments h5.field-arguments-heading{margin:0;padding:0 0 10px 0;font-weight:inherit;color:#999}#spectaql .field-arguments .field-argument{border-top:1px #e0e0e0 solid;padding:10px 0}#spectaql .field-arguments .field-argument:last-child{padding-bottom:0}#spectaql .field-arguments .field-argument-name{margin:0;font-size:inherit;font-weight:inherit}#spectaql .deprecation-reason{word-break:break-word}#spectaql .deprecation-reason::before{display:inline;content:"Deprecated";padding:2px 5px;margin-right:5px;background:#fed7d8;color:#c60609;font-weight:700;font-size:.875em} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.0/api.html b/mkdocs/docs/graphql/v3.11.0/api.html new file mode 100644 index 00000000000..8e22f6d326a --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.0/api.html @@ -0,0 +1,18295 @@ + + + + + + + ChaosCenter API Documentation + + + + +
+ +
+
+ +
+
+

ChaosCenter API Documentation

+
+
+
+

Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform.

+
+
+
+
API Endpoints
+
# Dev:
+http://localhost:8080
+# Prod:
+http://localhost:8080/query
+
+
+
+
+
+

Common Error Response

+
+
+

All error responses follow the structure outlined below.

+
{
+  "errors": [
+    {
+      "message": "Error message",
+      "path": [
+        "Request path"
+      ]
+    }
+  ],
+  "data": {}
+}
+
+

Field Descriptions:

+
    +
  • errors:
    An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
    + Type: Array

    +
      +
    • message:
      A description of the error.
      + Type: String

      +
    • +
    • path:
      Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
      + Type: Array of Strings

      +
    • +
    +
  • +
  • data:
    This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
    + Type: Object
    +
  • +
+
+
+
+
+
+
+

Queries

+
+

+ getChaosFault +

+
+
+
+
Description
+

Get the fault list from a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a FaultDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosFault(
+  $projectID: ID!,
+  $request: ExperimentRequest!
+) {
+  getChaosFault(
+    projectID: $projectID,
+    request: $request
+  ) {
+    fault
+    engine
+    csv
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ExperimentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosFault": {
+      "fault": "abc123",
+      "engine": "abc123",
+      "csv": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHub +

+
+
+
+
Description
+

Get the details of a requested ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHubStatus! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ chaosHubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHub(
+  $projectID: ID!,
+  $chaosHubID: ID!
+) {
+  getChaosHub(
+    projectID: $projectID,
+    chaosHubID: $chaosHubID
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "chaosHubID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosHub": {
+      "id": "4",
+      "repoURL": "abc123",
+      "repoBranch": "abc123",
+      "remoteHub": "abc123",
+      "isAvailable": false,
+      "totalFaults": "xyz789",
+      "totalExperiments": "abc123",
+      "name": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "xyz789",
+      "isRemoved": false,
+      "sshPrivateKey": "abc123",
+      "sshPublicKey": "abc123",
+      "lastSyncedAt": "xyz789",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "description": "abc123",
+      "isDefault": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHubStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetChaosHubStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHubStats($projectID: ID!) {
+  getChaosHubStats(projectID: $projectID) {
+    totalChaosHubs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"getChaosHubStats": {"totalChaosHubs": 123}}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  getEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "environmentID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getEnvironment": {
+      "projectID": "xyz789",
+      "environmentID": "xyz789",
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "abc123",
+      "isRemoved": false,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperiment +

+
+
+
+
Description
+

Returns the experiment based on experiment ID

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperiment(
+  $projectID: ID!,
+  $experimentID: String!
+) {
+  getExperiment(
+    projectID: $projectID,
+    experimentID: $experimentID
+  ) {
+    experimentDetails {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+    averageResiliencyScore
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "experimentID": "xyz789"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperiment": {
+      "experimentDetails": Experiment,
+      "averageResiliencyScore": 987.65
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRun +

+
+
+
+
Description
+

Returns experiment run based on experiment run ID

+
+
+
+
+
+
+
Response
+

Returns an ExperimentRun! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - ID + +
+ notifyID - ID + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: ID,
+  $notifyID: ID
+) {
+  getExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  ) {
+    projectID
+    experimentRunID
+    experimentType
+    experimentID
+    weightages {
+      faultName
+      weightage
+    }
+    updatedAt
+    createdAt
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+    experimentName
+    experimentManifest
+    phase
+    resiliencyScore
+    faultsPassed
+    faultsFailed
+    faultsAwaited
+    faultsStopped
+    faultsNa
+    totalFaults
+    executionData
+    isRemoved
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+    notifyID
+    runSequence
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "4",
+  "notifyID": 4
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRun": {
+      "projectID": 4,
+      "experimentRunID": "4",
+      "experimentType": "abc123",
+      "experimentID": 4,
+      "weightages": [Weightages],
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "infra": Infra,
+      "experimentName": "xyz789",
+      "experimentManifest": "xyz789",
+      "phase": "All",
+      "resiliencyScore": 123.45,
+      "faultsPassed": 987,
+      "faultsFailed": 123,
+      "faultsAwaited": 987,
+      "faultsStopped": 987,
+      "faultsNa": 123,
+      "totalFaults": 987,
+      "executionData": "xyz789",
+      "isRemoved": false,
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails,
+      "notifyID": 4,
+      "runSequence": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRunStats +

+
+
+
+
Description
+

Query to get experiment run stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentRunStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRunStats($projectID: ID!) {
+  getExperimentRunStats(projectID: $projectID) {
+    totalExperimentRuns
+    totalCompletedExperimentRuns
+    totalTerminatedExperimentRuns
+    totalRunningExperimentRuns
+    totalStoppedExperimentRuns
+    totalErroredExperimentRuns
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRunStats": {
+      "totalExperimentRuns": 123,
+      "totalCompletedExperimentRuns": 987,
+      "totalTerminatedExperimentRuns": 123,
+      "totalRunningExperimentRuns": 123,
+      "totalStoppedExperimentRuns": 987,
+      "totalErroredExperimentRuns": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentStats($projectID: ID!) {
+  getExperimentStats(projectID: $projectID) {
+    totalExperiments
+    totalExpCategorizedByResiliencyScore {
+      id
+      count
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentStats": {
+      "totalExperiments": 987,
+      "totalExpCategorizedByResiliencyScore": [
+        ResilienceScoreCategory
+      ]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getGitOpsDetails +

+
+
+
+
Description
+

Returns the git configuration for gitops

+
+
+
+
+
+
+
Response
+

Returns a GitConfigResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetGitOpsDetails($projectID: ID!) {
+  getGitOpsDetails(projectID: $projectID) {
+    enabled
+    projectID
+    branch
+    repoURL
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getGitOpsDetails": {
+      "enabled": false,
+      "projectID": "abc123",
+      "branch": "abc123",
+      "repoURL": "abc123",
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "xyz789",
+      "password": "abc123",
+      "sshPrivateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getImageRegistry +

+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetImageRegistry($projectID: String!) {
+  getImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getImageRegistry": {
+      "isDefault": true,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "xyz789",
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfra +

+
+
+
+
Description
+

Returns infra with a particular infraID in the project

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  getInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfra": {
+      "projectID": "4",
+      "infraID": 4,
+      "name": "abc123",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "environmentID": "xyz789",
+      "platformName": "abc123",
+      "isActive": false,
+      "isInfraConfirmed": false,
+      "isRemoved": true,
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "noOfExperiments": 987,
+      "noOfExperimentRuns": 123,
+      "token": "abc123",
+      "infraNamespace": "abc123",
+      "serviceAccount": "xyz789",
+      "infraScope": "abc123",
+      "infraNsExists": true,
+      "infraSaExists": true,
+      "lastExperimentTimestamp": "abc123",
+      "startTime": "xyz789",
+      "version": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraDetails +

+
+
+
+
Description
+

Returns infra details based on identifiers

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraDetails(
+  $infraID: ID!,
+  $projectID: ID!
+) {
+  getInfraDetails(
+    infraID: $infraID,
+    projectID: $projectID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"infraID": "4", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraDetails": {
+      "projectID": "4",
+      "infraID": 4,
+      "name": "abc123",
+      "description": "abc123",
+      "tags": ["abc123"],
+      "environmentID": "xyz789",
+      "platformName": "abc123",
+      "isActive": false,
+      "isInfraConfirmed": true,
+      "isRemoved": false,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 987,
+      "token": "abc123",
+      "infraNamespace": "abc123",
+      "serviceAccount": "abc123",
+      "infraScope": "abc123",
+      "infraNsExists": true,
+      "infraSaExists": true,
+      "lastExperimentTimestamp": "abc123",
+      "startTime": "xyz789",
+      "version": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraManifest +

+
+
+
+
Description
+

Returns the manifest for a given infraID

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ upgrade - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraManifest(
+  $infraID: ID!,
+  $upgrade: Boolean!,
+  $projectID: ID!
+) {
+  getInfraManifest(
+    infraID: $infraID,
+    upgrade: $upgrade,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "infraID": "4",
+  "upgrade": false,
+  "projectID": 4
+}
+
+ + +
+
+
Response
+ + +
{"data": {"getInfraManifest": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetInfraStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraStats($projectID: ID!) {
+  getInfraStats(projectID: $projectID) {
+    totalInfrastructures
+    totalActiveInfrastructure
+    totalInactiveInfrastructures
+    totalConfirmedInfrastructure
+    totalNonConfirmedInfrastructures
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraStats": {
+      "totalInfrastructures": 123,
+      "totalActiveInfrastructure": 987,
+      "totalInactiveInfrastructures": 123,
+      "totalConfirmedInfrastructure": 987,
+      "totalNonConfirmedInfrastructures": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getPredefinedExperiment +

+
+
+
+
Description
+

Returns predefined experiment details of selected experiments

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ experimentName - [String!]! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetPredefinedExperiment(
+  $hubID: ID!,
+  $experimentName: [String!]!,
+  $projectID: ID!
+) {
+  getPredefinedExperiment(
+    hubID: $hubID,
+    experimentName: $experimentName,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "hubID": "4",
+  "experimentName": ["xyz789"],
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPredefinedExperiment": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "xyz789",
+        "experimentManifest": "xyz789"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbe +

+
+
+
+
Description
+

Returns a single Probe based on ProbeName and various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbe": {
+      "projectID": 4,
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 987,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeReference +

+
+
+
+
Description
+

Returns all the reference of the Probe based on ProbeName

+
+
+
+
+
+
+
Response
+

Returns a GetProbeReferenceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeReference(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbeReference(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    totalRuns
+    recentExecutions {
+      faultName
+      mode
+      executionHistory {
+        ...ExecutionHistoryFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbeReference": {
+      "projectID": "4",
+      "name": "abc123",
+      "totalRuns": 123,
+      "recentExecutions": [RecentExecutions]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeYAML +

+
+
+
+
Description
+

Returns the Probe YAML based on ProbeName which can be used in ChaosEngine manifest

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - GetProbeYAMLRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeYAML(
+  $projectID: ID!,
+  $request: GetProbeYAMLRequest!
+) {
+  getProbeYAML(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": GetProbeYAMLRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"getProbeYAML": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbesInExperimentRun +

+
+
+
+
Description
+

Returns all the Probes attached to the requested Experiment Run

+
+
+
+
+
+
+
Response
+

Returns [GetProbesInExperimentRunResponse]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - String! + +
+ faultName - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbesInExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: String!,
+  $faultName: String!
+) {
+  getProbesInExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    faultName: $faultName
+  ) {
+    probe {
+      projectID
+      name
+      description
+      tags
+      type
+      infrastructureType
+      kubernetesHTTPProperties {
+        ...KubernetesHTTPProbeFragment
+      }
+      kubernetesCMDProperties {
+        ...KubernetesCMDProbeFragment
+      }
+      k8sProperties {
+        ...K8SProbeFragment
+      }
+      promProperties {
+        ...PROMProbeFragment
+      }
+      recentExecutions {
+        ...ProbeRecentExecutionsFragment
+      }
+      referencedBy
+      updatedAt
+      createdAt
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+    }
+    mode
+    status {
+      verdict
+      description
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "abc123",
+  "faultName": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbesInExperimentRun": [
+      {
+        "probe": Probe,
+        "mode": "SOT",
+        "status": Status
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getServerVersion +

+
+
+
+
Description
+

Returns version of gql server

+
+
+
+
+
+
+
Response
+

Returns a ServerVersionResponse! +

+
+
+
+

Example

+
+
Query
+ + +
query GetServerVersion {
+  getServerVersion {
+    key
+    value
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getServerVersion": {
+      "key": "abc123",
+      "value": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getVersionDetails +

+
+
+
+
Description
+

Query to get the latest version of infra available

+
+
+
+
+
+
+
Response
+

Returns an InfraVersionDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetVersionDetails($projectID: ID!) {
+  getVersionDetails(projectID: $projectID) {
+    latestVersion
+    compatibleVersions
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getVersionDetails": {
+      "latestVersion": "xyz789",
+      "compatibleVersions": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosFaults +

+
+
+
+
Description
+

List the Charts details of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [Chart!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosFaults(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listChaosFaults(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    apiVersion
+    kind
+    metadata {
+      name
+      version
+      annotations {
+        ...AnnotationFragment
+      }
+    }
+    spec {
+      displayName
+      categoryDescription
+      keywords
+      maturity
+      maintainers {
+        ...MaintainerFragment
+      }
+      minKubeVersion
+      provider {
+        ...ProviderFragment
+      }
+      links {
+        ...LinkFragment
+      }
+      faults {
+        ...FaultListFragment
+      }
+      experiments
+      chaosExpCRDLink
+      platforms
+      chaosType
+    }
+    packageInfo {
+      packageName
+      experiments {
+        ...ExperimentsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": "4", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosFaults": [
+      {
+        "apiVersion": "abc123",
+        "kind": "abc123",
+        "metadata": Metadata,
+        "spec": Spec,
+        "packageInfo": PackageInformation
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosHub +

+
+
+
+
Description
+

Lists all the connected ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [ChaosHubStatus]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListChaosHubRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosHub(
+  $projectID: ID!,
+  $request: ListChaosHubRequest
+) {
+  listChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosHub": [
+      {
+        "id": "4",
+        "repoURL": "xyz789",
+        "repoBranch": "xyz789",
+        "remoteHub": "xyz789",
+        "isAvailable": true,
+        "totalFaults": "xyz789",
+        "totalExperiments": "abc123",
+        "name": "abc123",
+        "hubType": "GIT",
+        "isPrivate": false,
+        "authType": "BASIC",
+        "token": "abc123",
+        "userName": "xyz789",
+        "password": "abc123",
+        "isRemoved": false,
+        "sshPrivateKey": "abc123",
+        "sshPublicKey": "xyz789",
+        "lastSyncedAt": "xyz789",
+        "tags": ["abc123"],
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "createdAt": "abc123",
+        "updatedAt": "xyz789",
+        "description": "xyz789",
+        "isDefault": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listEnvironments +

+
+
+
+
Response
+

Returns a ListEnvironmentResponse +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListEnvironments(
+  $projectID: ID!,
+  $request: ListEnvironmentRequest
+) {
+  listEnvironments(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfEnvironments
+    environments {
+      projectID
+      environmentID
+      name
+      description
+      tags
+      type
+      createdAt
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      updatedAt
+      isRemoved
+      infraIDs
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listEnvironments": {
+      "totalNoOfEnvironments": 987,
+      "environments": [Environment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperiment +

+
+
+
+
Description
+

Returns the list of experiments based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperiment(
+  $projectID: ID!,
+  $request: ListExperimentRequest!
+) {
+  listExperiment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperiments
+    experiments {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperiment": {
+      "totalNoOfExperiments": 123,
+      "experiments": [Experiment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperimentRun +

+
+
+
+
Description
+

Returns the list of experiment run based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentRunResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperimentRun(
+  $projectID: ID!,
+  $request: ListExperimentRunRequest!
+) {
+  listExperimentRun(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperimentRuns
+    experimentRuns {
+      projectID
+      experimentRunID
+      experimentType
+      experimentID
+      weightages {
+        ...WeightagesFragment
+      }
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      experimentName
+      experimentManifest
+      phase
+      resiliencyScore
+      faultsPassed
+      faultsFailed
+      faultsAwaited
+      faultsStopped
+      faultsNa
+      totalFaults
+      executionData
+      isRemoved
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+      notifyID
+      runSequence
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRunRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperimentRun": {
+      "totalNoOfExperimentRuns": 123,
+      "experimentRuns": [ExperimentRun]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listImageRegistry +

+
+
+
+
Response
+

Returns [ImageRegistryResponse!] +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListImageRegistry($projectID: String!) {
+  listImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listImageRegistry": [
+      {
+        "isDefault": false,
+        "imageRegistryInfo": ImageRegistry,
+        "imageRegistryID": "abc123",
+        "projectID": "xyz789",
+        "updatedAt": "abc123",
+        "createdAt": "xyz789",
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "isRemoved": true
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listInfras +

+
+
+
+
Description
+

Returns infras with a particular infra type in the project

+
+
+
+
+
+
+
Response
+

Returns a ListInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListInfraRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListInfras(
+  $projectID: ID!,
+  $request: ListInfraRequest
+) {
+  listInfras(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfInfras
+    infras {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listInfras": {
+      "totalNoOfInfras": 987,
+      "infras": [Infra]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listPredefinedExperiments +

+
+
+
+
Description
+

List the PredefinedExperiments present in the hub

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListPredefinedExperiments(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listPredefinedExperiments(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listPredefinedExperiments": [
+      {
+        "experimentName": "xyz789",
+        "experimentCSV": "xyz789",
+        "experimentManifest": "abc123"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listProbes +

+
+
+
+
Description
+

Returns the list of Probes based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns [Probe]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infrastructureType - InfrastructureType + +
+ probeNames - [ID!] + +
+ filter - ProbeFilterInput + +
+
+
+
+

Example

+
+
Query
+ + +
query ListProbes(
+  $projectID: ID!,
+  $infrastructureType: InfrastructureType,
+  $probeNames: [ID!],
+  $filter: ProbeFilterInput
+) {
+  listProbes(
+    projectID: $projectID,
+    infrastructureType: $infrastructureType,
+    probeNames: $probeNames,
+    filter: $filter
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infrastructureType": "Kubernetes",
+  "probeNames": [4],
+  "filter": ProbeFilterInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listProbes": [
+      {
+        "projectID": "4",
+        "name": "xyz789",
+        "description": "xyz789",
+        "tags": ["xyz789"],
+        "type": "httpProbe",
+        "infrastructureType": "Kubernetes",
+        "kubernetesHTTPProperties": KubernetesHTTPProbe,
+        "kubernetesCMDProperties": KubernetesCMDProbe,
+        "k8sProperties": K8SProbe,
+        "promProperties": PROMProbe,
+        "recentExecutions": [ProbeRecentExecutions],
+        "referencedBy": 987,
+        "updatedAt": "abc123",
+        "createdAt": "abc123",
+        "updatedBy": UserDetails,
+        "createdBy": UserDetails
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ validateUniqueProbe +

+
+
+
+
Description
+

Validates if a probe is already present, returns true if unique

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ValidateUniqueProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  validateUniqueProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "probeName": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"validateUniqueProbe": false}}
+
+ + +
+
+
+
+

Mutations

+
+

+ addChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (includes the git clone operation)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  addChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "remoteHub": "abc123",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addProbe +

+
+
+
+
Description
+

Creates a new Probe

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  addProbe(
+    request: $request,
+    projectID: $projectID
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ProbeRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addProbe": {
+      "projectID": 4,
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 123,
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addRemoteChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (remote hub download)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateRemoteChaosHub! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddRemoteChaosHub(
+  $projectID: ID!,
+  $request: CreateRemoteChaosHub!
+) {
+  addRemoteChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateRemoteChaosHub
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addRemoteChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "remoteHub": "xyz789",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "xyz789",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ chaosExperimentRun +

+
+
+
+
Description
+

Creates a new experiment run and sends it to subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - ExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ChaosExperimentRun($request: ExperimentRunRequest!) {
+  chaosExperimentRun(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": ExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"chaosExperimentRun": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ confirmInfraRegistration +

+
+
+
+
Description
+

Confirms the subscriber's registration with the control plane

+
+
+
+
+
+
+
Response
+

Returns a ConfirmInfraRegistrationResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ConfirmInfraRegistration($request: InfraIdentity!) {
+  confirmInfraRegistration(request: $request) {
+    isInfraConfirmed
+    newAccessKey
+    infraID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "confirmInfraRegistration": {
+      "isInfraConfirmed": false,
+      "newAccessKey": "xyz789",
+      "infraID": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createChaosExperiment +

+
+
+
+
Description
+

Creates a new experiment and applies its manifest

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  createChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ChaosExperimentRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": 4,
+      "cronSyntax": "abc123",
+      "experimentName": "xyz789",
+      "experimentDescription": "abc123",
+      "isCustomExperiment": false,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateEnvironment(
+  $projectID: ID!,
+  $request: CreateEnvironmentRequest
+) {
+  createEnvironment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createEnvironment": {
+      "projectID": "abc123",
+      "environmentID": "abc123",
+      "name": "abc123",
+      "description": "xyz789",
+      "tags": ["xyz789"],
+      "type": "PROD",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "abc123",
+      "isRemoved": true,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createImageRegistry +

+
+
+
+
Description
+

Create an Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateImageRegistry(
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  createImageRegistry(
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createImageRegistry": {
+      "isDefault": true,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "abc123",
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosExperiment +

+
+
+
+
Description
+

Removes a experiment from infra

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ experimentRunID - String + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosExperiment(
+  $experimentID: String!,
+  $experimentRunID: String,
+  $projectID: ID!
+) {
+  deleteChaosExperiment(
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "abc123",
+  "experimentRunID": "xyz789",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosExperiment": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosHub +

+
+
+
+
Description
+

Delete the ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ hubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosHub(
+  $projectID: ID!,
+  $hubID: ID!
+) {
+  deleteChaosHub(
+    projectID: $projectID,
+    hubID: $hubID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "hubID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosHub": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  deleteEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "environmentID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteEnvironment": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteImageRegistry +

+
+
+
+
Description
+

Delete the Image Registry

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!
+) {
+  deleteImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "xyz789",
+  "projectID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteImageRegistry": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteInfra +

+
+
+
+
Description
+

Disconnects an infra and deletes its configuration from the control plane

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  deleteInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "infraID": "abc123"}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteInfra": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteProbe +

+
+
+
+
Description
+

Delete a Probe

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ probeName - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteProbe(
+  $probeName: ID!,
+  $projectID: ID!
+) {
+  deleteProbe(
+    probeName: $probeName,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"probeName": 4, "projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteProbe": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ disableGitOps +

+
+
+
+
Description
+

Disables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DisableGitOps($projectID: ID!) {
+  disableGitOps(projectID: $projectID)
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"disableGitOps": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ enableGitOps +

+
+
+
+
Description
+

Enables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation EnableGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  enableGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"enableGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ generateSSHKey +

+
+
+
+
Description
+

Generates Private and Public key for SSH authentication

+
+
+
+
+
+
+
Response
+

Returns an SSHKey! +

+
+
+
+

Example

+
+
Query
+ + +
mutation GenerateSSHKey {
+  generateSSHKey {
+    publicKey
+    privateKey
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "generateSSHKey": {
+      "publicKey": "abc123",
+      "privateKey": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ getManifestWithInfraID +

+
+
+
+
Description
+

Fetches manifest details

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+ accessKey - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GetManifestWithInfraID(
+  $projectID: ID!,
+  $infraID: String!,
+  $accessKey: String!
+) {
+  getManifestWithInfraID(
+    projectID: $projectID,
+    infraID: $infraID,
+    accessKey: $accessKey
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "abc123",
+  "accessKey": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getManifestWithInfraID": "abc123"
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ gitopsNotifier +

+
+
+
+
Description
+

Sends workflow run request(single run workflow only) to agent on gitops notification

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ clusterInfo - InfraIdentity! + +
+ experimentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GitopsNotifier(
+  $clusterInfo: InfraIdentity!,
+  $experimentID: ID!
+) {
+  gitopsNotifier(
+    clusterInfo: $clusterInfo,
+    experimentID: $experimentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"clusterInfo": InfraIdentity, "experimentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"gitopsNotifier": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeNamespace +

+
+
+
+
Description
+

Receives kubernetes namespace data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeNamespaceData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeNamespace($request: KubeNamespaceData!) {
+  kubeNamespace(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeNamespaceData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeNamespace": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeObj +

+
+
+
+
Description
+

Receives kubernetes object data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeObj($request: KubeObjectData!) {
+  kubeObj(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeObj": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ podLog +

+
+
+
+
Description
+

Receives pod logs for experiments from infra

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLog! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation PodLog($request: PodLog!) {
+  podLog(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLog}
+
+ + +
+
+
Response
+ + +
{"data": {"podLog": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ registerInfra +

+
+
+
+
Description
+

Connect a new infra for a user in a specified project

+
+
+
+
+
+
+
Response
+

Returns a RegisterInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - RegisterInfraRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RegisterInfra(
+  $projectID: ID!,
+  $request: RegisterInfraRequest!
+) {
+  registerInfra(
+    projectID: $projectID,
+    request: $request
+  ) {
+    token
+    infraID
+    name
+    manifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": RegisterInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "registerInfra": {
+      "token": "abc123",
+      "infraID": "abc123",
+      "name": "xyz789",
+      "manifest": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ runChaosExperiment +

+
+
+
+
Description
+

Run the chaos experiment (used by frontend)

+
+
+
+
+
+
+
Response
+

Returns a RunChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RunChaosExperiment(
+  $experimentID: String!,
+  $projectID: ID!
+) {
+  runChaosExperiment(
+    experimentID: $experimentID,
+    projectID: $projectID
+  ) {
+    notifyID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"experimentID": "xyz789", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"runChaosExperiment": {"notifyID": 4}}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosExperiment +

+
+
+
+
Description
+

Saves a new experiment or updates if already exists

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - SaveChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosExperiment(
+  $request: SaveChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  saveChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"request": SaveChaosExperimentRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"saveChaosExperiment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosHub +

+
+
+
+
Description
+

Save a ChaosHub configuration without cloning it

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  saveChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "saveChaosHub": {
+      "id": 4,
+      "repoURL": "abc123",
+      "repoBranch": "xyz789",
+      "remoteHub": "abc123",
+      "projectID": 4,
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ stopExperimentRuns +

+
+
+
+
Description
+

stopExperiment will halt all the ongoing runs of a particular experiment

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+ experimentRunID - String + +
+ notifyID - String + +
+
+
+
+

Example

+
+
Query
+ + +
mutation StopExperimentRuns(
+  $projectID: ID!,
+  $experimentID: String!,
+  $experimentRunID: String,
+  $notifyID: String
+) {
+  stopExperimentRuns(
+    projectID: $projectID,
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": 4,
+  "experimentID": "abc123",
+  "experimentRunID": "abc123",
+  "notifyID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"stopExperimentRuns": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ syncChaosHub +

+
+
+
+
Description
+

Sync changes from the Git repository of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ id - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SyncChaosHub(
+  $id: ID!,
+  $projectID: ID!
+) {
+  syncChaosHub(
+    id: $id,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "id": "4",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"syncChaosHub": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosExperiment +

+
+
+
+
Description
+

Updates the experiment

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  updateChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosExperiment": {
+      "experimentID": "xyz789",
+      "projectID": "4",
+      "cronSyntax": "abc123",
+      "experimentName": "xyz789",
+      "experimentDescription": "xyz789",
+      "isCustomExperiment": false,
+      "tags": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosHub +

+
+
+
+
Description
+

Update the configuration of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosHub(
+  $projectID: ID!,
+  $request: UpdateChaosHubRequest!
+) {
+  updateChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": UpdateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosHub": {
+      "id": "4",
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "remoteHub": "abc123",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "xyz789",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "abc123",
+      "isRemoved": true,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateCronExperimentState +

+
+
+
+
Description
+

Enable/Disable cron experiment state

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ disable - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateCronExperimentState(
+  $experimentID: String!,
+  $disable: Boolean!,
+  $projectID: ID!
+) {
+  updateCronExperimentState(
+    experimentID: $experimentID,
+    disable: $disable,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "xyz789",
+  "disable": true,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateCronExperimentState": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateEnvironment(
+  $projectID: ID!,
+  $request: UpdateEnvironmentRequest
+) {
+  updateEnvironment(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": UpdateEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"updateEnvironment": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateGitOps +

+
+
+
+
Description
+

Updates gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  updateGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "configurations": GitConfig
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateImageRegistry +

+
+
+
+
Description
+

Update the Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  updateImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "abc123",
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "xyz789",
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateProbe +

+
+
+
+
Description
+

Update the configuration of a Probe

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  updateProbe(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"request": ProbeRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"updateProbe": "abc123"}}
+
+ + +
+
+
+
+

Subscriptions

+
+

+ getInfraEvents +

+
+
+
+
Description
+

Listens infra events from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraEventResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetInfraEvents($projectID: String!) {
+  getInfraEvents(projectID: $projectID) {
+    eventID
+    eventType
+    eventName
+    description
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "xyz789"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraEvents": {
+      "eventID": "4",
+      "eventType": "abc123",
+      "eventName": "abc123",
+      "description": "xyz789",
+      "infra": Infra
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeNamespace +

+
+
+
+
Description
+

Returns a kubernetes namespaces given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeNamespaceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeNamespaceRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeNamespace($request: KubeNamespaceRequest!) {
+  getKubeNamespace(request: $request) {
+    infraID
+    kubeNamespace {
+      name
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeNamespaceRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeNamespace": {
+      "infraID": 4,
+      "kubeNamespace": [KubeNamespace]
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeObject +

+
+
+
+
Description
+

Returns a kubernetes object given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeObjectResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeObject($request: KubeObjectRequest!) {
+  getKubeObject(request: $request) {
+    infraID
+    kubeObj {
+      namespace
+      data {
+        ...ObjectDataFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeObject": {
+      "infraID": "4",
+      "kubeObj": KubeObject
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getPodLog +

+
+
+
+
Description
+

Returns experiment logs from the pods

+
+
+
+
+
+
+
Response
+

Returns a PodLogResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLogRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetPodLog($request: PodLogRequest!) {
+  getPodLog(request: $request) {
+    experimentRunID
+    podName
+    podType
+    log
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLogRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPodLog": {
+      "experimentRunID": 4,
+      "podName": "abc123",
+      "podType": "xyz789",
+      "log": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ infraConnect +

+
+
+
+
Description
+

Listens infra operation request from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraActionResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription InfraConnect($request: InfraIdentity!) {
+  infraConnect(request: $request) {
+    projectID
+    action {
+      requestID
+      requestType
+      k8sManifest
+      namespace
+      externalData
+      username
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "infraConnect": {
+      "projectID": "xyz789",
+      "action": ActionPayload
+    }
+  }
+}
+
+ + +
+
+
+
+

Types

+
+

ActionPayload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
requestID - String! + +
requestType - String! + +
k8sManifest - String! + +
namespace - String! + +
externalData - String + +
username - String + +
+
+
+
+
+
Example
+ + +
{
+  "requestID": "abc123",
+  "requestType": "xyz789",
+  "k8sManifest": "abc123",
+  "namespace": "xyz789",
+  "externalData": "xyz789",
+  "username": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Annotation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
categories - String! + +
vendor - String! + +
createdAt - String! + +
repository - String! + +
support - String! + +
chartDescription - String! + +
+
+
+
+
+
Example
+ + +
{
+  "categories": "abc123",
+  "vendor": "abc123",
+  "createdAt": "xyz789",
+  "repository": "xyz789",
+  "support": "xyz789",
+  "chartDescription": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Audit

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
updatedAt - String + +
createdAt - String + +
updatedBy - UserDetails + +
createdBy - UserDetails + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Audit Types
+

ExperimentRun

+
+

RecentExperimentRun

+
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

ImageRegistryResponse

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

AuthType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

BASIC

+
+
+

NONE

+
+
+

SSH

+
+
+

TOKEN

+
+
+
+
+
+
+
Example
+ + +
"BASIC"
+
+ + +
+
+
+
+
+
+ Types +
+

Boolean

+
+
+
+
Description
+

The Boolean scalar type represents true or false.

+
+
+
+
+
Example
+ + +
true
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String + ID of the experiment
+ runExperiment - Boolean + Boolean check indicating if the created scenario will be executed or not
+ experimentManifest - String! + Manifest of the experiment
+ experimentType - ExperimentType + Type of the experiment
+ cronSyntax - String! + Cron syntax of the experiment schedule
+ experimentName - String! + Name of the experiment
+ experimentDescription - String! + Description of the experiment
+ weightages - [WeightagesInput!]! + Array containing weightage and name of each chaos experiment in the experiment
+ isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
+ infraID - ID! + ID of the target infra in which the experiment will run
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "runExperiment": false,
+  "experimentManifest": "xyz789",
+  "experimentType": "All",
+  "cronSyntax": "xyz789",
+  "experimentName": "xyz789",
+  "experimentDescription": "xyz789",
+  "weightages": [WeightagesInput],
+  "isCustomExperiment": true,
+  "infraID": 4,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentResponse

+
+
+
+
Description
+

Defines the response received for querying the details of chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + ID of the experiment
projectID - ID! + +
cronSyntax - String! + Cron syntax of the experiment schedule
experimentName - String! + Name of the experiment
experimentDescription - String! + Description of the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "projectID": 4,
+  "cronSyntax": "abc123",
+  "experimentName": "abc123",
+  "experimentDescription": "abc123",
+  "isCustomExperiment": true,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the chaos hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
remoteHub - String! + Connected Hub of remote repository
projectID - ID! + ID of the project in which the chaos hub is present
isDefault - Boolean! + Default Hub Identifier
name - String! + Name of the chaos hub
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
description - String + Description of ChaosHub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
isRemoved - Boolean! + Bool value indicating if the chaos hub is removed
createdAt - String! + Timestamp when the chaos hub was created
updatedAt - String! + Timestamp when the chaos hub was last updated
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
+
+
+
+
+
Example
+ + +
{
+  "id": "4",
+  "repoURL": "xyz789",
+  "repoBranch": "abc123",
+  "remoteHub": "xyz789",
+  "projectID": 4,
+  "isDefault": true,
+  "name": "xyz789",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "description": "abc123",
+  "hubType": "GIT",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "xyz789",
+  "password": "abc123",
+  "sshPrivateKey": "abc123",
+  "isRemoved": true,
+  "createdAt": "abc123",
+  "updatedAt": "abc123",
+  "lastSyncedAt": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubFilterInput

+
+
+
+
Description
+

Defines filter options for ChaosHub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubName - String + Name of the ChaosHub
+ tags - [String!] + Tags of a chaos hub
+ description - String + Description of a chaos hub
+
+
+
+
+
Example
+ + +
{
+  "chaosHubName": "abc123",
+  "tags": ["abc123"],
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubStatus

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
remoteHub - String! + Connected Hub of remote repository
isAvailable - Boolean! + Bool value indicating whether the hub is available or not.
totalFaults - String! + Total number of experiments in the hub
totalExperiments - String! + Total experiments
name - String! + Name of the chaos hub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
isRemoved - Boolean! + Bool value indicating whether the hub is private or not.
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
sshPublicKey - String + Public SSH key for authenticating into private chaos hub
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
createdAt - String! + Created at timestamp
updatedAt - String! + Updated at timestamp
description - String + Description of ChaosHub
isDefault - Boolean! + Default Hub Identifier
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "abc123",
+  "repoBranch": "abc123",
+  "remoteHub": "abc123",
+  "isAvailable": true,
+  "totalFaults": "abc123",
+  "totalExperiments": "abc123",
+  "name": "xyz789",
+  "hubType": "GIT",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "xyz789",
+  "password": "abc123",
+  "isRemoved": false,
+  "sshPrivateKey": "abc123",
+  "sshPublicKey": "xyz789",
+  "lastSyncedAt": "abc123",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "createdAt": "abc123",
+  "updatedAt": "xyz789",
+  "description": "xyz789",
+  "isDefault": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Chart

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
apiVersion - String! + +
kind - String! + +
metadata - Metadata! + +
spec - Spec! + +
packageInfo - PackageInformation! + +
+
+
+
+
+
Example
+ + +
{
+  "apiVersion": "abc123",
+  "kind": "xyz789",
+  "metadata": Metadata,
+  "spec": Spec,
+  "packageInfo": PackageInformation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CommonProbeProperties

+
+
+
+
Description
+

Defines the common probe properties shared across different ProbeTypes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + +
CommonProbeProperties Types
+

KubernetesCMDProbe

+
+

PROMProbe

+
+

KubernetesHTTPProbe

+
+

K8SProbe

+
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Comparator

+
+
+
+
Description
+

Defines the properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
type - String! + Type of the Comparator
value - String! + Value of the Comparator
criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "abc123",
+  "value": "xyz789",
+  "criteria": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ComparatorInput

+
+
+
+
Description
+

Defines the input properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ type - String! + Type of the Comparator
+ value - String! + Value of the Comparator
+ criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "xyz789",
+  "value": "abc123",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ConfirmInfraRegistrationResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isInfraConfirmed - Boolean! + +
newAccessKey - String + +
infraID - String + +
+
+
+
+
+
Example
+ + +
{
+  "isInfraConfirmed": true,
+  "newAccessKey": "abc123",
+  "infraID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateChaosHubRequest

+
+
+
+
Description
+

Defines the details required for creating a chaos hub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ remoteHub - String! + Connected Hub of remote repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "tags": ["xyz789"],
+  "description": "abc123",
+  "repoURL": "xyz789",
+  "repoBranch": "abc123",
+  "remoteHub": "xyz789",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "xyz789",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String! + +
+ type - EnvironmentType! + +
+ description - String + +
+ tags - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "abc123",
+  "type": "PROD",
+  "description": "xyz789",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateRemoteChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ remoteHub - String! + Connected Hub of remote repository
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "tags": ["abc123"],
+  "description": "abc123",
+  "repoURL": "xyz789",
+  "remoteHub": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

DateRange

+
+
+
+
Description
+

Defines the start date and end date for the filtering the data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ startDate - String! + Start date
+ endDate - String + End date
+
+
+
+
+
Example
+ + +
{
+  "startDate": "xyz789",
+  "endDate": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Environment

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
environmentID - String! + +
name - String! + +
description - String + +
tags - [String!] + +
type - EnvironmentType! + +
createdAt - String! + +
createdBy - UserDetails + +
updatedBy - UserDetails + +
updatedAt - String! + +
isRemoved - Boolean + +
infraIDs - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "abc123",
+  "environmentID": "abc123",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "type": "PROD",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "updatedAt": "abc123",
+  "isRemoved": true,
+  "infraIDs": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the environment
+ description - String + ID of the environment
+ type - EnvironmentType + Type name of environment
+ tags - [String!] + Tags of an environment
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "description": "xyz789",
+  "type": "PROD",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - EnvironmentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

PROD

+
+
+

NON_PROD

+
+
+
+
+
+
+
Example
+ + +
"PROD"
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutedByExperiment

+
+
+
+
Description
+

Defines the Executed by which experiment details for Probes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + Experiment ID
experimentName - String! + Experiment Name
updatedAt - Int! + Timestamp at which the experiment was last updated
updatedBy - UserDetails + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "experimentName": "xyz789",
+  "updatedAt": 987,
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutionHistory

+
+
+
+
Description
+

Defines the Execution History of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
mode - Mode! + Probe Mode
faultName - String! + Fault Name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "mode": "SOT",
+  "faultName": "xyz789",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Experiment

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentID - String! + ID of the experiment
experimentType - String + Type of the experiment
experimentManifest - String! + Manifest of the experiment
cronSyntax - String! + Cron syntax of the experiment schedule
name - String! + Name of the experiment
description - String! + Description of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
infra - Infra + Target infra in which the experiment will run
isRemoved - Boolean! + Bool value indicating if the experiment has removed
tags - [String!] + Tags of the experiment
createdBy - UserDetails + User who created the experiment
recentExperimentRunDetails - [RecentExperimentRun] + Array of object containing details of recent experiment runs
updatedBy - UserDetails + Details of the user who updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "experimentID": "xyz789",
+  "experimentType": "xyz789",
+  "experimentManifest": "xyz789",
+  "cronSyntax": "abc123",
+  "name": "xyz789",
+  "description": "xyz789",
+  "weightages": [Weightages],
+  "isCustomExperiment": false,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "infra": Infra,
+  "isRemoved": false,
+  "tags": ["abc123"],
+  "createdBy": UserDetails,
+  "recentExperimentRunDetails": [RecentExperimentRun],
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentFilterInput

+
+
+
+
Description
+

Defines filter options for experiments

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraName - String + Name of the infra in which the experiment is running
+ infraID - String + ID of the infra in which the experiment is running
+ infraActive - Boolean + Bool value indicating if Chaos Infrastructure is active
+ scheduleType - ScheduleType + Scenario type of the experiment i.e. CRON or NON_CRON
+ status - String + Status of the latest experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraName": "abc123",
+  "infraID": "abc123",
+  "infraActive": false,
+  "scheduleType": "CRON",
+  "status": "abc123",
+  "dateRange": DateRange,
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ category - String! + Name of the chart being used
+ experimentName - String! + Name of the experiment
+ hubID - String! + ID of the hub
+
+
+
+
+
Example
+ + +
{
+  "category": "abc123",
+  "experimentName": "abc123",
+  "hubID": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRun

+
+
+
+
Description
+

Defines the details of a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentRunID - ID! + ID of the experiment run which is to be queried
experimentType - String + Type of the experiment
experimentID - ID! + ID of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
updatedAt - String! + Timestamp at which experiment run was last updated
createdAt - String! + Timestamp at which experiment run was created
infra - Infra! + Target infra in which the experiment will run
experimentName - String! + Name of the experiment
experimentManifest - String! + Manifest of the experiment run
phase - ExperimentRunStatus! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
faultsPassed - Int + Number of faults passed
faultsFailed - Int + Number of faults failed
faultsAwaited - Int + Number of faults awaited
faultsStopped - Int + Number of faults stopped
faultsNa - Int + Number of faults which are not available
totalFaults - Int + Total number of faults
executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the faults
isRemoved - Boolean + Bool value indicating if the experiment run has removed
updatedBy - UserDetails + User who has updated the experiment
createdBy - UserDetails + User who has created the experiment run
notifyID - ID + Notify ID of the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "experimentRunID": 4,
+  "experimentType": "xyz789",
+  "experimentID": "4",
+  "weightages": [Weightages],
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "infra": Infra,
+  "experimentName": "abc123",
+  "experimentManifest": "xyz789",
+  "phase": "All",
+  "resiliencyScore": 123.45,
+  "faultsPassed": 123,
+  "faultsFailed": 123,
+  "faultsAwaited": 987,
+  "faultsStopped": 123,
+  "faultsNa": 123,
+  "totalFaults": 987,
+  "executionData": "abc123",
+  "isRemoved": false,
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails,
+  "notifyID": "4",
+  "runSequence": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunFilterInput

+
+
+
+
Description
+

Defines input type for experiment run filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraID - String + Name of the infra infra
+ experimentType - ScheduleType + Type of the experiment
+ experimentStatus - ExperimentRunStatus + Status of the experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ experimentRunID - String + ID of experiment run
+ experimentRunStatus - [String] + Array of experiment run status
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraID": "abc123",
+  "experimentType": "CRON",
+  "experimentStatus": "All",
+  "dateRange": DateRange,
+  "experimentRunID": "xyz789",
+  "experimentRunStatus": ["xyz789"],
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunRequest

+
+
+
+
Description
+

Defines the details for a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String! + ID of the experiment
+ notifyID - String + notifyID is required to give an ack for non cron experiment execution
+ experimentRunID - String! + ID of the experiment run which is to be queried
+ experimentName - String! + Name of the experiment
+ executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the experiments
+ infraID - InfraIdentity! + ID of the infra infra in which the experiment is running
+ revisionID - String! + ID of the revision which consists manifest details
+ completed - Boolean! + Bool value indicating if the experiment run has completed
+ isRemoved - Boolean + Bool value indicating if the experiment run has removed
+ updatedBy - String! + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "notifyID": "abc123",
+  "experimentRunID": "xyz789",
+  "experimentName": "xyz789",
+  "executionData": "abc123",
+  "infraID": InfraIdentity,
+  "revisionID": "abc123",
+  "completed": false,
+  "isRemoved": false,
+  "updatedBy": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunSortInput

+
+
+
+
Description
+

Defines sorting options for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunStatus

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Running

+
+
+

Completed

+
+
+

Completed_With_Error

+
+
+

Stopped

+
+
+

Skipped

+
+
+

Error

+
+
+

Timeout

+
+
+

Terminated

+
+
+

Queued

+
+
+

NA

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Experiment

+
+
+

CronExperiment

+
+
+

ChaosEngine

+
+
+

ChaosSchedule

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

Experiments

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
CSV - String! + +
desc - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "CSV": "xyz789",
+  "desc": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultDetails

+
+
+
+
Description
+

Fault Detail consists of all the fault related details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
fault - String! + fault consists of fault.yaml
engine - String! + engine consists engine.yaml
csv - String! + csv consists chartserviceversion.yaml
+
+
+
+
+
Example
+ + +
{
+  "fault": "abc123",
+  "engine": "abc123",
+  "csv": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
displayName - String! + +
description - String! + +
plan - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "displayName": "abc123",
+  "description": "xyz789",
+  "plan": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Float

+
+
+
+
Description
+

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

+
+
+
+
+
Example
+ + +
123.45
+
+ + +
+
+
+
+
+
+ Types +
+

GET

+
+
+
+
Description
+

Details of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GETRequest

+
+
+
+
Description
+

Details for input of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "abc123",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetChaosHubStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
totalChaosHubs - Int! + Total number of chaoshubs
+
+
+
+
+
Example
+ + +
{"totalChaosHubs": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentResponse

+
+
+
+
Description
+

Defines the details for a given experiment with some additional data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
experimentDetails - Experiment! + Details of experiment
averageResiliencyScore - Float + Average resiliency score of the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentDetails": Experiment,
+  "averageResiliencyScore": 987.65
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentRunStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperimentRuns - Int! + Total number of experiment runs
totalCompletedExperimentRuns - Int! + Total number of completed experiments runs
totalTerminatedExperimentRuns - Int! + Total number of stopped experiment runs
totalRunningExperimentRuns - Int! + Total number of running experiment runs
totalStoppedExperimentRuns - Int! + Total number of stopped experiment runs
totalErroredExperimentRuns - Int! + Total number of errored experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalExperimentRuns": 123,
+  "totalCompletedExperimentRuns": 987,
+  "totalTerminatedExperimentRuns": 123,
+  "totalRunningExperimentRuns": 987,
+  "totalStoppedExperimentRuns": 123,
+  "totalErroredExperimentRuns": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperiments - Int! + Total number of experiments
totalExpCategorizedByResiliencyScore - [ResilienceScoreCategory]! + Total number of cron experiments
+
+
+
+
+
Example
+ + +
{
+  "totalExperiments": 123,
+  "totalExpCategorizedByResiliencyScore": [
+    ResilienceScoreCategory
+  ]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetInfraStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalInfrastructures - Int! + Total number of infrastructures
totalActiveInfrastructure - Int! + Total number of active infrastructures
totalInactiveInfrastructures - Int! + Total number of inactive infrastructures
totalConfirmedInfrastructure - Int! + Total number of confirmed infrastructures
totalNonConfirmedInfrastructures - Int! + Total number of non confirmed infrastructures
+
+
+
+
+
Example
+ + +
{
+  "totalInfrastructures": 987,
+  "totalActiveInfrastructure": 123,
+  "totalInactiveInfrastructures": 987,
+  "totalConfirmedInfrastructure": 987,
+  "totalNonConfirmedInfrastructures": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeReferenceResponse

+
+
+
+
Description
+

Defines the response of the Probe reference API

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
totalRuns - Int! + Total Runs
recentExecutions - [RecentExecutions]! + Recent Executions of the probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "name": "xyz789",
+  "totalRuns": 987,
+  "recentExecutions": [RecentExecutions]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeYAMLRequest

+
+
+
+
Description
+

Defines the input requests for GetProbeYAML query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeName - ID! + Probe name of the probe
+ mode - Mode! + Mode of the Probe (SoT, EoT, Edge, Continuous or OnChaos)
+
+
+
+
+
Example
+ + +
{"probeName": "4", "mode": "SOT"}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbesInExperimentRunResponse

+
+
+
+
Description
+

Defines the response for Get Probe In Experiment Run Query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probe - Probe! + Probe Object
mode - Mode! + Mode of the probe
status - Status! + Status of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probe": Probe,
+  "mode": "SOT",
+  "status": Status
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfig

+
+
+
+
Description
+

Details of setting a Git repository

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ branch - String! + Git branch where the chaos charts will be pushed and synced
+ repoURL - String! + URL of the Git repository
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token used for private repository
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "branch": "abc123",
+  "repoURL": "abc123",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfigResponse

+
+
+
+
Description
+

Response received after configuring GitOps

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
enabled - Boolean! + Bool value indicating whether GitOps is enabled or not
projectID - String! + ID of the project where GitOps is configured
branch - String + Git branch where the chaos charts will be pushed and synced
repoURL - String + URL of the Git repository
authType - AuthType + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token used for private repository
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "enabled": false,
+  "projectID": "xyz789",
+  "branch": "xyz789",
+  "repoURL": "xyz789",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

HubType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

GIT

+
+
+

REMOTE

+
+
+
+
+
+
+
Example
+ + +
"GIT"
+
+ + +
+
+
+
+
+
+ Types +
+

ID

+
+
+
+
Description
+

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

+
+
+
+
+
Example
+ + +
"4"
+
+ + +
+
+
+
+
+
+ Types +
+

INFRA_SCOPE

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

namespace

+
+
+

cluster

+
+
+
+
+
+
+
Example
+ + +
"namespace"
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistry

+
+
+
+
Description
+

Defines details for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryName - String! + Name of Image Registry
imageRepoName - String! + Name of image repository
imageRegistryType - String! + Type of the image registry: public/private
secretName - String + Secret which is used for private registry
secretNamespace - String + Namespace where the secret is available
enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": false,
+  "imageRegistryName": "abc123",
+  "imageRepoName": "abc123",
+  "imageRegistryType": "xyz789",
+  "secretName": "xyz789",
+  "secretNamespace": "xyz789",
+  "enableRegistry": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryInput

+
+
+
+
Description
+

Defines input data for querying the details of an image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
+ imageRegistryName - String! + Name of Image Registry
+ imageRepoName - String! + Name of image repository
+ imageRegistryType - String! + Type of the image registry: public/private
+ secretName - String + Secret which is used for private registry
+ secretNamespace - String + Namespace where the secret is available
+ enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": false,
+  "imageRegistryName": "abc123",
+  "imageRepoName": "abc123",
+  "imageRegistryType": "xyz789",
+  "secretName": "xyz789",
+  "secretNamespace": "abc123",
+  "enableRegistry": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryResponse

+
+
+
+
Description
+

Defines response data for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryInfo - ImageRegistry + Information Image Registry
imageRegistryID - String! + ID of the image registry
projectID - String! + ID of the project in which image registry is created
updatedAt - String + Timestamp when the image registry was last updated
createdAt - String + Timestamp when the image registry was created
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
isRemoved - Boolean + Bool value indicating if the image registry has been removed
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryInfo": ImageRegistry,
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789",
+  "updatedAt": "xyz789",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "isRemoved": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Infra

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
infraID - ID! + ID of the infra
name - String! + Name of the infra
description - String + Description of the infra
tags - [String!] + Tags of the infra
environmentID - String! + Environment ID for the infra
platformName - String! + Infra Platform Name eg. GKE,AWS, Others
isActive - Boolean! + Boolean value indicating if chaos infrastructure is active or not
isInfraConfirmed - Boolean! + Boolean value indicating if chaos infrastructure is confirmed or not
isRemoved - Boolean! + Boolean value indicating if chaos infrastructure is removed or not
updatedAt - String! + Timestamp when the infra was last updated
createdAt - String! + Timestamp when the infra was created
noOfExperiments - Int + Number of schedules created in the infra
noOfExperimentRuns - Int + Number of experiments run in the infra
token - String! + Token used to verify and retrieve the infra manifest
infraNamespace - String + Namespace where the infra is being installed
serviceAccount - String + Name of service account used by infra
infraScope - String! + Scope of the infra : ns or cluster
infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
lastExperimentTimestamp - String + Timestamp of the last experiment run in the infra
startTime - String! + Timestamp when the infra got connected
version - String! + Version of the infra
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
infraType - InfrastructureType + Type of the infrastructure
updateStatus - UpdateStatus! + update status of infra
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "infraID": "4",
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "environmentID": "abc123",
+  "platformName": "xyz789",
+  "isActive": false,
+  "isInfraConfirmed": true,
+  "isRemoved": false,
+  "updatedAt": "xyz789",
+  "createdAt": "abc123",
+  "noOfExperiments": 987,
+  "noOfExperimentRuns": 987,
+  "token": "xyz789",
+  "infraNamespace": "abc123",
+  "serviceAccount": "xyz789",
+  "infraScope": "abc123",
+  "infraNsExists": true,
+  "infraSaExists": true,
+  "lastExperimentTimestamp": "xyz789",
+  "startTime": "xyz789",
+  "version": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "infraType": "Kubernetes",
+  "updateStatus": "AVAILABLE"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraActionResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
action - ActionPayload! + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "abc123",
+  "action": ActionPayload
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraEventResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
eventID - ID! + +
eventType - String! + +
eventName - String! + +
description - String! + +
infra - Infra! + +
+
+
+
+
+
Example
+ + +
{
+  "eventID": "4",
+  "eventType": "abc123",
+  "eventName": "xyz789",
+  "description": "xyz789",
+  "infra": Infra
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the infra
+ infraID - String + ID of the infra
+ description - String + ID of the infra
+ platformName - String + Platform name of infra
+ infraScope - INFRA_SCOPE + Scope of infra
+ isActive - Boolean + Status of infra
+ tags - [String] + Tags of an infra
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "infraID": "abc123",
+  "description": "xyz789",
+  "platformName": "abc123",
+  "infraScope": "namespace",
+  "isActive": false,
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraIdentity

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - String! + +
+ accessKey - String! + +
+ version - String! + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "xyz789",
+  "accessKey": "abc123",
+  "version": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraVersionDetails

+
+
+
+
Description
+

InfraVersionDetails returns the details of compatible infra versions and the latest infra version supported

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
latestVersion - String! + Latest infra version supported
compatibleVersions - [String!]! + List of all infra versions supported
+
+
+
+
+
Example
+ + +
{
+  "latestVersion": "abc123",
+  "compatibleVersions": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfrastructureType

+
+
+
+
Values
+ + + + + + + + + + + + + +
Enum ValueDescription
+

Kubernetes

+
+
+
+
+
+
+
Example
+ + +
"Kubernetes"
+
+ + +
+
+
+
+
+
+ Types +
+

Int

+
+
+
+
Description
+

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

+
+
+
+
+
Example
+ + +
123
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbe

+
+
+
+
Description
+

Defines the K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
group - String + Group of the Probe
version - String! + Version of the Probe
resource - String! + Resource of the Probe
namespace - String + Namespace of the Probe
resourceNames - String + Resource Names of the Probe
fieldSelector - String + Field Selector of the Probe
labelSelector - String + Label Selector of the Probe
operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "group": "abc123",
+  "version": "abc123",
+  "resource": "abc123",
+  "namespace": "xyz789",
+  "resourceNames": "xyz789",
+  "fieldSelector": "abc123",
+  "labelSelector": "xyz789",
+  "operation": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbeRequest

+
+
+
+
Description
+

Defines the input for K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ group - String + Group of the Probe
+ version - String! + Version of the Probe
+ resource - String! + Resource of the Probe
+ namespace - String + Namespace of the Probe
+ resourceNames - String + Resource Names of the Probe
+ fieldSelector - String + Field Selector of the Probe
+ labelSelector - String + Label Selector of the Probe
+ operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "group": "xyz789",
+  "version": "xyz789",
+  "resource": "xyz789",
+  "namespace": "abc123",
+  "resourceNames": "abc123",
+  "fieldSelector": "xyz789",
+  "labelSelector": "abc123",
+  "operation": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeGVRRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ group - String! + +
+ version - String! + +
+ resource - String! + +
+
+
+
+
+
Example
+ + +
{
+  "group": "xyz789",
+  "version": "abc123",
+  "resource": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespace

+
+
+
+
Description
+

Define name in the infra (not really useful at the moment but maybe we will need other field later)

+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the namespace
+
+
+
+
+
Example
+ + +
{"name": "xyz789"}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespaceData

+
+
+
+
Description
+

Defines the details of Kubernetes namespace

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes namespace details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes namespace is present
+ kubeNamespace - String! + List of KubeNamespace return by subscriber
+
+
+
+
+
Example
+ + +
{
+  "requestID": "4",
+  "infraID": InfraIdentity,
+  "kubeNamespace": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespaceRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes namespace data

+
+
+
Fields
+ + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra
+
+
+
+
+
Example
+ + +
{"infraID": "4"}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespaceResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Namespaces

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes namespace is present
kubeNamespace - [KubeNamespace]! + List of the Kubernetes namespace
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "kubeNamespace": [KubeNamespace]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObject

+
+
+
+
Description
+

KubeObject consists of the available resources in a namespace

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
namespace - String! + Namespace of the resource
data - [ObjectData]! + Details of the resource
+
+
+
+
+
Example
+ + +
{
+  "namespace": "abc123",
+  "data": [ObjectData]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectData

+
+
+
+
Description
+

Defines the details of Kubernetes object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes object details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes object is present
+ kubeObj - String! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "requestID": "4",
+  "infraID": InfraIdentity,
+  "kubeObj": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes object data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra in which the Kubernetes object is present
+ kubeObjRequest - KubeGVRRequest + GVR Request
+ namespace - String! + Namespace in which the Kubernetes object is present
+ objectType - String! + +
+ workloads - [Workload] + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "kubeObjRequest": KubeGVRRequest,
+  "namespace": "abc123",
+  "objectType": "abc123",
+  "workloads": [Workload]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes object is present
kubeObj - KubeObject! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{"infraID": 4, "kubeObj": KubeObject}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbe

+
+
+
+
Description
+

Defines the CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
command - String! + Command of the Probe
comparator - Comparator! + Comparator of the Probe
source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "command": "xyz789",
+  "comparator": Comparator,
+  "source": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ command - String! + Command of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+ source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "command": "xyz789",
+  "comparator": ComparatorInput,
+  "source": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbe

+
+
+
+
Description
+

Defines the Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
url - String! + URL of the Probe
method - Method! + HTTP method of the Probe
insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "url": "xyz789",
+  "method": Method,
+  "insecureSkipVerify": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ url - String! + URL of the Probe
+ method - MethodRequest! + HTTP method of the Probe
+ insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "url": "abc123",
+  "method": MethodRequest,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+ +
+
+ Types +
+

ListChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubIDs - [ID!] + Array of ChaosHub IDs for which details will be fetched
+ filter - ChaosHubFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{"chaosHubIDs": [4], "filter": ChaosHubFilterInput}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - EnvironmentFilterInput + Details for fetching filtered data
+ sort - EnvironmentSortInput + Details for fetching sorted data
+
+
+
+
+
Example
+ + +
{
+  "environmentIDs": [4],
+  "pagination": Pagination,
+  "filter": EnvironmentFilterInput,
+  "sort": EnvironmentSortInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfEnvironments - Int! + Total number of environment
environments - [Environment] + +
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfEnvironments": 987,
+  "environments": [Environment]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRequest

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentSortInput + Details for fetching sorted data
+ filter - ExperimentFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentIDs": [4],
+  "pagination": Pagination,
+  "sort": ExperimentSortInput,
+  "filter": ExperimentFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentResponse

+
+
+
+
Description
+

Defines the details for a experiment with total experiment count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperiments - Int! + Total number of experiments
experiments - [Experiment]! + Details related to the experiments
+
+
+
+
+
Example
+ + +
{"totalNoOfExperiments": 123, "experiments": [Experiment]}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunRequest

+
+
+
+
Description
+

Defines the details for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentRunIDs - [ID] + Array of experiment run IDs for which details will be fetched
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentRunSortInput + Details for fetching sorted data
+ filter - ExperimentRunFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentRunIDs": ["4"],
+  "experimentIDs": [4],
+  "pagination": Pagination,
+  "sort": ExperimentRunSortInput,
+  "filter": ExperimentRunFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunResponse

+
+
+
+
Description
+

Defines the details of a experiment to sent as response

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperimentRuns - Int! + Total number of experiment runs
experimentRuns - [ExperimentRun]! + Defines details of experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfExperimentRuns": 123,
+  "experimentRuns": [ExperimentRun]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraRequest

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraIDs - [ID!] + Array of infra IDs for which details will be fetched
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - InfraFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "infraIDs": [4],
+  "environmentIDs": ["4"],
+  "pagination": Pagination,
+  "filter": InfraFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraResponse

+
+
+
+
Description
+

Defines the details for a infras with total infras count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfInfras - Int! + Total number of infras
infras - [Infra]! + Details related to the infras
+
+
+
+
+
Example
+ + +
{"totalNoOfInfras": 123, "infras": [Infra]}
+
+ + +
+
+
+
+
+
+ Types +
+

Maintainer

+
+
+
+
Description
+

Defines the details of the maintainer

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the maintainer
email - String! + Email of the maintainer
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "email": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Metadata

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
version - String! + +
annotations - Annotation! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "version": "xyz789",
+  "annotations": Annotation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Method

+
+
+
+
Description
+

Defines the methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
get - GET + A GET request
post - POST + A POST request
+
+
+
+
+
Example
+ + +
{"get": GET, "post": POST}
+
+ + +
+
+
+
+
+
+ Types +
+

MethodRequest

+
+
+
+
Description
+

Defines the input for methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ get - GETRequest + A GET request
+ post - POSTRequest + A POST request
+
+
+
+
+
Example
+ + +
{
+  "get": GETRequest,
+  "post": POSTRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Mode

+
+
+
+
Description
+

Defines the different modes of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

SOT

+
+
+

EOT

+
+
+

Edge

+
+
+

Continuous

+
+
+

OnChaos

+
+
+
+
+
+
+
Example
+ + +
"SOT"
+
+ + +
+
+
+
+
+
+ Types +
+

ObjectData

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
labels - [String!] + Labels present in the resource
name - String! + Name of the resource
+
+
+
+
+
Example
+ + +
{
+  "labels": ["abc123"],
+  "name": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POST

+
+
+
+
Description
+

Details of POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
contentType - String + Content Type of the request
body - String + Body of the request
bodyPath - String + Body Path of the HTTP body required for the http post request
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "abc123",
+  "body": "xyz789",
+  "bodyPath": "abc123",
+  "criteria": "xyz789",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POSTRequest

+
+
+
+
Description
+

Details for input of the POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ contentType - String + Content Type of the request
+ body - String + Body of the request
+ bodyPath - String + Body Path of the request for Body
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "abc123",
+  "body": "abc123",
+  "bodyPath": "abc123",
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbe

+
+
+
+
Description
+

Defines the PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
endpoint - String! + Endpoint of the Probe
query - String + Query of the Probe
queryPath - String + Query path of the Probe
comparator - Comparator! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "endpoint": "xyz789",
+  "query": "xyz789",
+  "queryPath": "abc123",
+  "comparator": Comparator
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbeRequest

+
+
+
+
Description
+

Defines the input for PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ endpoint - String! + Endpoint of the Probe
+ query - String + Query of the Probe
+ queryPath - String + Query path of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "endpoint": "xyz789",
+  "query": "xyz789",
+  "queryPath": "abc123",
+  "comparator": ComparatorInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PackageInformation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
packageName - String! + +
experiments - [Experiments!]! + +
+
+
+
+
+
Example
+ + +
{
+  "packageName": "abc123",
+  "experiments": [Experiments]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Pagination

+
+
+
+
Description
+

Defines data required to fetch paginated data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ page - Int! + Page number for which data will be fetched
+ limit - Int! + Number of data to be fetched
+
+
+
+
+
Example
+ + +
{"page": 123, "limit": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLog

+
+
+
+
Description
+

Response received for querying pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - InfraIdentity! + ID of the cluster
+ requestID - ID! + Unique request ID of a particular node which is being queried
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podType - String! + Type of the pod: chaosengine
+ log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "infraID": InfraIdentity,
+  "requestID": 4,
+  "experimentRunID": 4,
+  "podName": "abc123",
+  "podType": "xyz789",
+  "log": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogRequest

+
+
+
+
Description
+

Defines the details for fetching the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the cluster
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podNamespace - String! + Namespace where the pod is running
+ podType - String! + Type of the pod: chaosEngine or not pod
+ expPod - String + Name of the experiment pod fetched from execution data
+ runnerPod - String + Name of the runner pod fetched from execution data
+ chaosNamespace - String + Namespace where the experiment is executing
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "experimentRunID": "4",
+  "podName": "xyz789",
+  "podNamespace": "xyz789",
+  "podType": "abc123",
+  "expPod": "xyz789",
+  "runnerPod": "abc123",
+  "chaosNamespace": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogResponse

+
+
+
+
Description
+

Defines the response received for querying querying the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
podName - String! + Name of the pod for which logs are queried
podType - String! + Type of the pod: chaosengine
log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "podName": "xyz789",
+  "podType": "abc123",
+  "log": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PredefinedExperimentList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentName - String! + Name of the experiment
experimentCSV - String! + Experiment CSV
experimentManifest - String! + Experiment Manifest
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "abc123",
+  "experimentCSV": "abc123",
+  "experimentManifest": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Probe

+
+
+
+
Description
+

Defines the details of the Probe entity

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
description - String + Description of the Probe
tags - [String!] + Tags of the Probe
type - ProbeType! + Type of the Probe [From list of ProbeType enum]
infrastructureType - InfrastructureType! + Infrastructure type of the Probe
kubernetesHTTPProperties - KubernetesHTTPProbe + Kubernetes HTTP Properties of the specific type of the Probe
kubernetesCMDProperties - KubernetesCMDProbe + Kubernetes CMD Properties of the specific type of the Probe
k8sProperties - K8SProbe + K8S Properties of the specific type of the Probe
promProperties - PROMProbe + PROM Properties of the specific type of the Probe
recentExecutions - [ProbeRecentExecutions!] + All execution histories of the probe
referencedBy - Int + Referenced by how many faults
updatedAt - String! + Timestamp at which the Probe was last updated
createdAt - String! + Timestamp at which the Probe was created
updatedBy - UserDetails + User who has updated the Probe
createdBy - UserDetails + User who has created the Probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbe,
+  "kubernetesCMDProperties": KubernetesCMDProbe,
+  "k8sProperties": K8SProbe,
+  "promProperties": PROMProbe,
+  "recentExecutions": [ProbeRecentExecutions],
+  "referencedBy": 987,
+  "updatedAt": "xyz789",
+  "createdAt": "abc123",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeFilterInput

+
+
+
+
Description
+

Defines the input for Probe filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the Probe
+ dateRange - DateRange + Date range for filtering purpose
+ type - [ProbeType] + Type of the Probe [From list of ProbeType enum]
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "dateRange": DateRange,
+  "type": ["httpProbe"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of global probe in ListProbe API with different fault and execution history each time

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "faultName": "abc123",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRequest

+
+
+
+
Description
+

Defines the details required for creating a Chaos Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - ID! + Name of the Probe
+ description - String + Description of the Probe
+ tags - [String!] + Tags of the Probe
+ type - ProbeType! + Type of the Probe [From list of ProbeType enum]
+ infrastructureType - InfrastructureType! + Infrastructure type of the Probe
+ kubernetesHTTPProperties - KubernetesHTTPProbeRequest + HTTP Properties of the specific type of the Probe
+ kubernetesCMDProperties - KubernetesCMDProbeRequest + CMD Properties of the specific type of the Probe
+ k8sProperties - K8SProbeRequest + K8S Properties of the specific type of the Probe
+ promProperties - PROMProbeRequest + PROM Properties of the specific type of the Probe
+
+
+
+
+
Example
+ + +
{
+  "name": 4,
+  "description": "abc123",
+  "tags": ["xyz789"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbeRequest,
+  "kubernetesCMDProperties": KubernetesCMDProbeRequest,
+  "k8sProperties": K8SProbeRequest,
+  "promProperties": PROMProbeRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeType

+
+
+
+
Description
+

Defines the different types of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

httpProbe

+
+
+

cmdProbe

+
+
+

promProbe

+
+
+

k8sProbe

+
+
+
+
+
+
+
Example
+ + +
"httpProbe"
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeVerdict

+
+
+
+
Description
+

Defines the older different statuses of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

Passed

+
+
+

Failed

+
+
+

NA

+
+
+

Awaited

+
+
+
+
+
+
+
Example
+ + +
"Passed"
+
+ + +
+
+
+
+
+
+ Types +
+

Provider

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + +
+
+
+
+
+
Example
+ + +
{"name": "xyz789"}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
mode - Mode! + Probe mode
executionHistory - [ExecutionHistory!]! + Execution History
+
+
+
+
+
Example
+ + +
{
+  "faultName": "xyz789",
+  "mode": "SOT",
+  "executionHistory": [ExecutionHistory]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExperimentRun

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
phase - String! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
createdBy - UserDetails + User who created the experiment run
updatedBy - UserDetails + User who updated the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "phase": "xyz789",
+  "resiliencyScore": 123.45,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "runSequence": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraRequest

+
+
+
+
Description
+

Defines the details for the new infra being connected

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the infra
+ environmentID - String! + Environment ID for the infra
+ infrastructureType - InfrastructureType! + Type of Infra : internal/external
+ description - String + Description of the infra
+ platformName - String! + Infra Platform Name eg. GKE,AWS, Others
+ infraNamespace - String + Namespace where the infra is being installed
+ serviceAccount - String + Name of service account used by infra
+ infraScope - String! + Scope of the infra : ns or infra
+ infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
+ infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
+ skipSsl - Boolean + Bool value indicating whether infra will skip ssl checks or not
+ nodeSelector - String + Node selectors used by infra
+ tolerations - [Toleration] + Node tolerations used by infra
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "environmentID": "xyz789",
+  "infrastructureType": "Kubernetes",
+  "description": "abc123",
+  "platformName": "xyz789",
+  "infraNamespace": "xyz789",
+  "serviceAccount": "xyz789",
+  "infraScope": "abc123",
+  "infraNsExists": true,
+  "infraSaExists": true,
+  "skipSsl": false,
+  "nodeSelector": "xyz789",
+  "tolerations": [Toleration],
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraResponse

+
+
+
+
Description
+

Response received for registering a new infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
token - String! + Token used to verify and retrieve the infra manifest
infraID - String! + Unique ID for the newly registered infra
name - String! + Infra name as sent in request
manifest - String! + Infra Manifest
+
+
+
+
+
Example
+ + +
{
+  "token": "xyz789",
+  "infraID": "abc123",
+  "name": "xyz789",
+  "manifest": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ResilienceScoreCategory

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
id - Int! + Lower bound of the range(inclusive)
count - Int! + total experiments with avg resilience score between lower bound and upper bound(exclusive)
+
+
+
+
+
Example
+ + +
{"id": 987, "count": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

ResourceDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
description - String + +
tags - [String!] + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceDetails Types
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RunChaosExperimentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
notifyID - ID! + +
+
+
+
+
+
Example
+ + +
{"notifyID": 4}
+
+ + +
+
+
+
+
+
+ Types +
+

SSHKey

+
+
+
+
Description
+

Defines the SSHKey details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
publicKey - String! + Public SSH key authenticating into git repository
privateKey - String! + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "publicKey": "xyz789",
+  "privateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

SaveChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the experiment
+ type - ExperimentType + Type of the experiment
+ name - String! + Name of the experiment
+ description - String! + Description of the experiment
+ manifest - String! + Manifest of the experiment
+ infraID - ID! + ID of the target infrastructure in which the experiment will run
+ tags - [String!] + Tags of the infrastructure
+
+
+
+
+
Example
+ + +
{
+  "id": "xyz789",
+  "type": "All",
+  "name": "xyz789",
+  "description": "abc123",
+  "manifest": "xyz789",
+  "infraID": 4,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ScheduleType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

CRON

+
+
+

NON_CRON

+
+
+

ALL

+
+
+
+
+
+
+
Example
+ + +
"CRON"
+
+ + +
+
+
+
+
+
+ Types +
+

ServerVersionResponse

+
+
+
+
Description
+

Response received for fetching GQL server version

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
key - String! + Returns server version key
value - String! + Returns server version value
+
+
+
+
+
Example
+ + +
{
+  "key": "abc123",
+  "value": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Spec

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
displayName - String! + +
categoryDescription - String! + +
keywords - [String!]! + +
maturity - String! + +
maintainers - [Maintainer!]! + +
minKubeVersion - String! + +
provider - Provider! + +
links - [Link!]! + +
faults - [FaultList!]! + +
experiments - [String!] + +
chaosExpCRDLink - String! + +
platforms - [String!]! + +
chaosType - String + +
+
+
+
+
+
Example
+ + +
{
+  "displayName": "xyz789",
+  "categoryDescription": "abc123",
+  "keywords": ["abc123"],
+  "maturity": "abc123",
+  "maintainers": [Maintainer],
+  "minKubeVersion": "abc123",
+  "provider": Provider,
+  "links": [Link],
+  "faults": [FaultList],
+  "experiments": ["abc123"],
+  "chaosExpCRDLink": "abc123",
+  "platforms": ["xyz789"],
+  "chaosType": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Status

+
+
+
+
Description
+

Status defines whether a probe is pass or fail

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
verdict - ProbeVerdict! + Verdict defines the verdict of the probe, range: Passed, Failed, N/A
description - String + Description defines the description of probe status
+
+
+
+
+
Example
+ + +
{
+  "verdict": "Passed",
+  "description": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

String

+
+
+
+
Description
+

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

+
+
+
+
+
Example
+ + +
"abc123"
+
+ + +
+
+
+
+
+
+ Types +
+

Toleration

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ tolerationSeconds - Int + +
+ key - String + +
+ operator - String + +
+ effect - String + +
+ value - String + +
+
+
+
+
+
Example
+ + +
{
+  "tolerationSeconds": 123,
+  "key": "xyz789",
+  "operator": "abc123",
+  "effect": "xyz789",
+  "value": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the chaos hub
+ name - String! + Name of the chaos hub
+ description - String + Description of the infra
+ tags - [String!] + Tags of the infra
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ remoteHub - String! + Connected Hub of remote repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "id": "xyz789",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "repoURL": "xyz789",
+  "repoBranch": "abc123",
+  "remoteHub": "xyz789",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "xyz789",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String + +
+ description - String + +
+ tags - [String] + +
+ type - EnvironmentType + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "type": "PROD"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateStatus

+
+
+
+
Description
+

UpdateStatus represents if infra needs to be updated

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

AVAILABLE

+
+
+

MANDATORY

+
+
+

NOT_REQUIRED

+
+
+
+
+
+
+
Example
+ + +
"AVAILABLE"
+
+ + +
+
+
+
+
+
+ Types +
+

UserDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
userID - String! + +
username - String! + +
email - String! + +
+
+
+
+
+
Example
+ + +
{
+  "userID": "xyz789",
+  "username": "xyz789",
+  "email": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Weightages

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Name of the fault
weightage - Int! + Weightage of the experiment
+
+
+
+
+
Example
+ + +
{"faultName": "abc123", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

WeightagesInput

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ faultName - String! + Name of the fault
+ weightage - Int! + Weightage of the fault
+
+
+
+
+
Example
+ + +
{"faultName": "xyz789", "weightage": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

Workload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + +
+ kind - String! + +
+ namespace - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "kind": "abc123",
+  "namespace": "abc123"
+}
+
+ + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.0/config.yml b/mkdocs/docs/graphql/v3.11.0/config.yml new file mode 100644 index 00000000000..dbd28b51386 --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.0/config.yml @@ -0,0 +1,33 @@ +spectaql: + targetDir: ./mkdocs/docs/graphql/v3.11.0 + logoFile: ./mkdocs/docs/graphql/logo.png + faviconFile: ./mkdocs/docs/graphql/logo.png + displayAllServers: true + themeDir: ./mkdocs/docs/graphql/v3.11.0/custom-theme + +introspection: + removeTrailingPeriodFromDescriptions: false + schemaFile: ./chaoscenter/graphql/definitions/shared/*.graphqls + queryNameStrategy: capitalizeFirst + fieldExpansionDepth: 2 + + spectaqlDirective: + enable: true + +extensions: + graphqlScalarExamples: true + +info: + title: ChaosCenter API Documentation + description: Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform. + + x-introItems: + - title: Common Error Response + file: ./mkdocs/docs/graphql/v3.11.0/error_response_guide.md + +servers: + - url: http://localhost:8080 + description: Dev + - url: http://localhost:8080/query + description: Prod + production: true diff --git a/mkdocs/docs/graphql/v3.11.0/custom-theme/stylesheets/custom.scss b/mkdocs/docs/graphql/v3.11.0/custom-theme/stylesheets/custom.scss new file mode 100644 index 00000000000..68e1aa2268c --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.0/custom-theme/stylesheets/custom.scss @@ -0,0 +1,24 @@ + +$line-height-heading: 1.2; +$font-size-large-heading: 1.7105263158rem; +$font-weight-large-heading: 700; +$content-padding: 20px; +$text-color: #535b60; +$text-weight: 400; +$text-size: 1.5789473684rem; + +#spectaql { + h2 { + color: $text-color; + font-weight: $text-weight; + font-size: $text-size; + } + + .doc-heading { + line-height: $line-height-heading; + font-size: $font-size-large-heading; + font-weight: $font-weight-large-heading; + color: #535b60 + } + +} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.0/error_response_guide.md b/mkdocs/docs/graphql/v3.11.0/error_response_guide.md new file mode 100644 index 00000000000..76e4ab30fce --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.0/error_response_guide.md @@ -0,0 +1,29 @@ +All error responses follow the structure outlined below. + +```json +{ + "errors": [ + { + "message": "Error message", + "path": [ + "Request path" + ] + } + ], + "data": {} +} +``` + +### Field Descriptions: +- **errors**:
+ An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
+ **Type: `Array`**

+ - **message**:
+ A description of the error.
+ **Type: `String`**

+ - **path**:
+ Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
+ **Type: `Array of Strings`**

+- **data**:
+ This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
+ **Type: `Object`**
diff --git a/mkdocs/docs/graphql/v3.11.0/images/favicon.png b/mkdocs/docs/graphql/v3.11.0/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.11.0/images/logo.png b/mkdocs/docs/graphql/v3.11.0/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.11.0/javascripts/spectaql.min.js b/mkdocs/docs/graphql/v3.11.0/javascripts/spectaql.min.js new file mode 100644 index 00000000000..6ef3202c222 --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.0/javascripts/spectaql.min.js @@ -0,0 +1 @@ +function scrollSpy(){var l=5,e=document.querySelector("html"),c=(e&&(e=window.getComputedStyle(e).scrollPaddingTop)&&"string"==typeof e&&"auto"!==e&&e.endsWith("px")&&(l+=parseInt(e.split("px")[0])),"nav-scroll-active"),i=null,d=[];function t(){i=null;var e=document.querySelectorAll("[data-traverse-target]");Array.prototype.forEach.call(e,function(e){d.push({id:e.id,top:e.offsetTop})})}var n=debounce(function(){t(),o()},500),o=debounce(function(){var e,t,n,o,r=(e=>{for(var t=e+l,n=0;n=d[n].top&&(!o||t{toggleMenu(),scrollSpy()}); \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.0/stylesheets/spectaql.min.css b/mkdocs/docs/graphql/v3.11.0/stylesheets/spectaql.min.css new file mode 100644 index 00000000000..e7666ab6b36 --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.0/stylesheets/spectaql.min.css @@ -0,0 +1 @@ +#spectaql h2{color:#535b60;font-weight:400;font-size:1.5789473684rem}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;font-weight:700;color:#535b60}#spectaql{padding:0;margin:0}#spectaql pre{overflow:auto;margin-top:0;margin-bottom:20px}#spectaql pre code{display:block;background:#ccc}#spectaql table{width:100%;table-layout:fixed;text-align:left;border-collapse:collapse}#spectaql table td,#spectaql table th{margin:0;padding:0}#spectaql #introduction .example-section>*,#spectaql .definition-heading,#spectaql .doc-heading,#spectaql .introduction-item-title,#spectaql .operation-heading{overflow:hidden;text-overflow:ellipsis}#spectaql #page{display:flex}#spectaql #page *{box-sizing:border-box}#spectaql #page.drawer-open #sidebar{z-index:1000;transform:translateX(0)}#spectaql #page.drawer-open .drawer-overlay{display:block;background:rgba(0,0,0,.5);z-index:10}#spectaql #sidebar{position:fixed;min-width:250px;max-width:250px;flex-shrink:0;transition:transform .2s ease-out;transform:translateX(-100%);z-index:10;padding-top:20px;background:#fff}@media (min-width:48em){#spectaql #sidebar{position:relative;transform:none}}@media (min-width:64em){#spectaql #sidebar{min-width:300px;max-width:300px}}#spectaql .sidebar-top-container{display:flex;align-items:center;padding:0 20px}#spectaql #mobile-navbar{display:flex;align-items:center;position:sticky;top:0}@media (min-width:48em){#spectaql #mobile-navbar{display:none}}#spectaql .sidebar-open-button{display:flex;align-items:flex-start;margin:0;padding:0;border:none;background:0 0}#spectaql .sidebar-open-button .hamburger{width:16px;height:14px;cursor:pointer}#spectaql .sidebar-open-button .hamburger::after{display:block;content:"";height:2px;background:#535b60;box-shadow:0 5px 0 #535b60,0 10px 0 #535b60}#spectaql .sidebar-open-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .close-button{display:block}#spectaql .close-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width:48em){#spectaql .close-button{display:none}}#spectaql .drawer-overlay{display:none;position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0)}@media (min-width:48em){#spectaql .drawer-overlay{display:none!important}}#spectaql #nav{display:flex;flex-direction:column;max-height:calc(100vh - 0px);padding:0 20px;padding-bottom:20px;position:sticky;top:0;overflow:auto}#spectaql #logo{margin-right:auto}#spectaql #logo img{display:block;width:100%;max-width:100%}#spectaql .nav-group-items,#spectaql .nav-group-section-items{padding:0;margin:0}#spectaql .nav-group-items>li,#spectaql .nav-group-section-items>li{list-style:none}#spectaql .nav-group-items .nav-group-section-title,#spectaql .nav-group-items>li,#spectaql .nav-group-section-items .nav-group-section-title,#spectaql .nav-group-section-items>li{overflow:hidden;text-overflow:ellipsis}#spectaql .nav-group-section-items{display:none}#spectaql .nav-scroll-expand .nav-group-section-items{display:block}#spectaql #docs{position:relative;margin:0 auto;min-width:100px;max-width:88em;flex-grow:1;flex-shrink:1;padding:20px}@media (min-width:48em){#spectaql .doc-row{display:flex;flex-wrap:wrap}}#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:100%}@media (min-width:48em){#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:50%}}@media (min-width:48em){#spectaql .doc-row .doc-copy{padding-right:20px}}@media (min-width:48em){#spectaql .doc-row .doc-examples{padding-left:20px}}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e}#spectaql{font-family:-apple-system,BlinkMacSystemFont,system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.6;background:#fff;color:#535b60}@media (min-width:32em){#spectaql{font-size:16px}}#spectaql a{color:#0298bf;text-decoration:none}#spectaql a:hover{color:#0182a2}#spectaql a:active,#spectaql a:focus{color:#0298bf}#spectaql code{font-size:.875em;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}#spectaql pre{color:#fff}#spectaql pre code{background:#222}#spectaql pre code,#spectaql pre code.hljs{font-size:.82em;line-height:1.4;padding:15px 20px}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;margin-top:10px}@media (min-width:48em){#spectaql .doc-heading{margin-top:-10px}}#spectaql .close-button{background:0 0;border:none;padding:5px;font-size:16px;font-weight:700;color:#535b60}#spectaql #introduction{margin-bottom:60px}#spectaql #introduction .example-section:not(.example-section-is-code){margin-bottom:20px}#spectaql #introduction .example-section:not(.example-section-is-code) h5,#spectaql #introduction .example-section:not(.example-section-is-code) p{margin:0;font-size:1em}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:20px;padding-bottom:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:30px;padding-bottom:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:40px;padding-bottom:40px}}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:20px;padding-right:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:30px;padding-right:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:50px;padding-right:50px}}#spectaql #sidebar{padding-bottom:0;background:#fff}#spectaql #sidebar a{color:#535b60}#spectaql #sidebar a.nav-scroll-active,#spectaql #sidebar a:hover{font-weight:700}#spectaql #sidebar a.nav-scroll-active{color:#535b60}#spectaql #sidebar a:hover{color:#0182a2}@media (min-width:48em){#spectaql #sidebar{border-right:2px solid #d8d8d8}}#spectaql #mobile-navbar{background:#fff;margin-top:-20px;margin-left:-20px;margin-right:-20px}@media (min-width:32em){#spectaql #mobile-navbar{margin-top:-30px;margin-left:-30px;margin-right:-30px}}#spectaql #mobile-navbar .sidebar-open-button::after{display:block;content:"All Topics";margin-left:10px;color:#535b60}#spectaql #nav .nav-group{margin-top:20px}#spectaql #nav .nav-group li{margin-bottom:5px}#spectaql #nav .nav-group-title{font-size:.875em;font-weight:400;margin:0 0 6px 0;color:#999}#spectaql #nav .nav-group-section-title{font-size:inherit;margin:0;margin-bottom:5px;font-weight:400}#spectaql #nav .nav-group-section-items{margin-left:.75em}#spectaql .definition,#spectaql .operation{margin-bottom:60px}#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.72em}#spectaql .definition .definition-heading code,#spectaql .definition .operation-heading code,#spectaql .operation .definition-heading code,#spectaql .operation .operation-heading code{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:32em){#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.7105263158rem}}#spectaql .definition-group-name,#spectaql .group-heading,#spectaql .operation-group-name{border-top:2px solid #d8d8d8;padding-top:3px;color:#999;font-size:inherit;font-weight:inherit}#spectaql .definition-group-name a,#spectaql .group-heading a,#spectaql .operation-group-name a{color:#999}#spectaql .definition-group-name a:hover,#spectaql .group-heading a:hover,#spectaql .operation-group-name a:hover{font-weight:700}#spectaql .doc-examples{margin-top:20px}#spectaql .doc-examples .example-heading{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .doc-examples .example-section-is-code h5{color:#999;text-transform:uppercase;background:#000;font-size:.75em;font-weight:700;padding:.6em 0 .6em 20px;margin:0;opacity:1}@media (min-width:48em){#spectaql .doc-examples{margin-top:0}}#spectaql .doc-copy p{margin:0 0 20px 0}#spectaql .doc-copy p:last-child{margin-bottom:0}#spectaql .doc-copy table tr th{font-weight:400;border-bottom:2px solid #d8d8d8}#spectaql .doc-copy table tr td{border-bottom:1px solid #e0e0e0}#spectaql .doc-copy table tr.row-has-field-arguments td,#spectaql .doc-copy table tr:last-child td{border-bottom:none}#spectaql .doc-copy table tr td,#spectaql .doc-copy table tr th{padding:5px}#spectaql .doc-copy table tr td:first-child,#spectaql .doc-copy table tr th:first-child{padding-left:0}#spectaql .doc-copy table tr td:last-child,#spectaql .doc-copy table tr th:last-child{padding-right:0}#spectaql .doc-copy .doc-copy-section{margin-bottom:30px}#spectaql .doc-copy .doc-copy-section>h5{margin:0 0 5px 0;font-size:inherit;font-weight:inherit;color:#999}#spectaql .doc-copy .definition-description>h5,#spectaql .doc-copy .definition-properties>h5,#spectaql .doc-copy .operation-description>h5{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .field-arguments{font-size:.875em;background-color:#fafbfc;border:1px solid #e0e0e0;padding:10px;margin-bottom:5px}#spectaql .field-arguments p{margin:10px 0 0 0}#spectaql .field-arguments h5.field-arguments-heading{margin:0;padding:0 0 10px 0;font-weight:inherit;color:#999}#spectaql .field-arguments .field-argument{border-top:1px #e0e0e0 solid;padding:10px 0}#spectaql .field-arguments .field-argument:last-child{padding-bottom:0}#spectaql .field-arguments .field-argument-name{margin:0;font-size:inherit;font-weight:inherit}#spectaql .deprecation-reason{word-break:break-word}#spectaql .deprecation-reason::before{display:inline;content:"Deprecated";padding:2px 5px;margin-right:5px;background:#fed7d8;color:#c60609;font-weight:700;font-size:.875em} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.x/api.html b/mkdocs/docs/graphql/v3.11.x/api.html new file mode 100644 index 00000000000..5c10624d7bf --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.x/api.html @@ -0,0 +1,18310 @@ + + + + + + + ChaosCenter API Documentation + + + + +
+ +
+
+ +
+
+

ChaosCenter API Documentation

+
+
+
+

Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform.

+
+
+
+
API Endpoints
+
# Dev:
+http://localhost:8080
+# Prod:
+http://localhost:8080/query
+
+
+
+
+
+

Common Error Response

+
+
+

All error responses follow the structure outlined below.

+
{
+  "errors": [
+    {
+      "message": "Error message",
+      "path": [
+        "Request path"
+      ]
+    }
+  ],
+  "data": {}
+}
+
+

Field Descriptions:

+
    +
  • errors:
    An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
    + Type: Array

    +
      +
    • message:
      A description of the error.
      + Type: String

      +
    • +
    • path:
      Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
      + Type: Array of Strings

      +
    • +
    +
  • +
  • data:
    This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
    + Type: Object
    +
  • +
+
+
+
+
+
+
+

Queries

+
+

+ getChaosFault +

+
+
+
+
Description
+

Get the fault list from a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a FaultDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosFault(
+  $projectID: ID!,
+  $request: ExperimentRequest!
+) {
+  getChaosFault(
+    projectID: $projectID,
+    request: $request
+  ) {
+    fault
+    engine
+    csv
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ExperimentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosFault": {
+      "fault": "abc123",
+      "engine": "abc123",
+      "csv": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHub +

+
+
+
+
Description
+

Get the details of a requested ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHubStatus! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ chaosHubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHub(
+  $projectID: ID!,
+  $chaosHubID: ID!
+) {
+  getChaosHub(
+    projectID: $projectID,
+    chaosHubID: $chaosHubID
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "chaosHubID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosHub": {
+      "id": "4",
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "remoteHub": "abc123",
+      "isAvailable": true,
+      "totalFaults": "abc123",
+      "totalExperiments": "abc123",
+      "name": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "xyz789",
+      "isRemoved": true,
+      "sshPrivateKey": "xyz789",
+      "sshPublicKey": "xyz789",
+      "lastSyncedAt": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "description": "xyz789",
+      "isDefault": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHubStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetChaosHubStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHubStats($projectID: ID!) {
+  getChaosHubStats(projectID: $projectID) {
+    totalChaosHubs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"getChaosHubStats": {"totalChaosHubs": 123}}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  getEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "environmentID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getEnvironment": {
+      "projectID": "abc123",
+      "environmentID": "abc123",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "abc123",
+      "isRemoved": false,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperiment +

+
+
+
+
Description
+

Returns the experiment based on experiment ID

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperiment(
+  $projectID: ID!,
+  $experimentID: String!
+) {
+  getExperiment(
+    projectID: $projectID,
+    experimentID: $experimentID
+  ) {
+    experimentDetails {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+    averageResiliencyScore
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "experimentID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperiment": {
+      "experimentDetails": Experiment,
+      "averageResiliencyScore": 987.65
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRun +

+
+
+
+
Description
+

Returns experiment run based on experiment run ID

+
+
+
+
+
+
+
Response
+

Returns an ExperimentRun! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - ID + +
+ notifyID - ID + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: ID,
+  $notifyID: ID
+) {
+  getExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  ) {
+    projectID
+    experimentRunID
+    experimentType
+    experimentID
+    weightages {
+      faultName
+      weightage
+    }
+    updatedAt
+    createdAt
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+    experimentName
+    experimentManifest
+    phase
+    resiliencyScore
+    faultsPassed
+    faultsFailed
+    faultsAwaited
+    faultsStopped
+    faultsNa
+    totalFaults
+    executionData
+    isRemoved
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+    notifyID
+    runSequence
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentRunID": 4,
+  "notifyID": 4
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRun": {
+      "projectID": 4,
+      "experimentRunID": 4,
+      "experimentType": "xyz789",
+      "experimentID": 4,
+      "weightages": [Weightages],
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "infra": Infra,
+      "experimentName": "abc123",
+      "experimentManifest": "xyz789",
+      "phase": "All",
+      "resiliencyScore": 987.65,
+      "faultsPassed": 123,
+      "faultsFailed": 123,
+      "faultsAwaited": 123,
+      "faultsStopped": 987,
+      "faultsNa": 123,
+      "totalFaults": 987,
+      "executionData": "abc123",
+      "isRemoved": true,
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails,
+      "notifyID": "4",
+      "runSequence": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRunStats +

+
+
+
+
Description
+

Query to get experiment run stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentRunStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRunStats($projectID: ID!) {
+  getExperimentRunStats(projectID: $projectID) {
+    totalExperimentRuns
+    totalCompletedExperimentRuns
+    totalTerminatedExperimentRuns
+    totalRunningExperimentRuns
+    totalStoppedExperimentRuns
+    totalErroredExperimentRuns
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRunStats": {
+      "totalExperimentRuns": 123,
+      "totalCompletedExperimentRuns": 123,
+      "totalTerminatedExperimentRuns": 987,
+      "totalRunningExperimentRuns": 123,
+      "totalStoppedExperimentRuns": 123,
+      "totalErroredExperimentRuns": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentStats($projectID: ID!) {
+  getExperimentStats(projectID: $projectID) {
+    totalExperiments
+    totalExpCategorizedByResiliencyScore {
+      id
+      count
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentStats": {
+      "totalExperiments": 123,
+      "totalExpCategorizedByResiliencyScore": [
+        ResilienceScoreCategory
+      ]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getGitOpsDetails +

+
+
+
+
Description
+

Returns the git configuration for gitops

+
+
+
+
+
+
+
Response
+

Returns a GitConfigResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetGitOpsDetails($projectID: ID!) {
+  getGitOpsDetails(projectID: $projectID) {
+    enabled
+    projectID
+    branch
+    repoURL
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getGitOpsDetails": {
+      "enabled": true,
+      "projectID": "xyz789",
+      "branch": "xyz789",
+      "repoURL": "xyz789",
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getImageRegistry +

+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetImageRegistry($projectID: String!) {
+  getImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "xyz789",
+      "projectID": "xyz789",
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfra +

+
+
+
+
Description
+

Returns infra with a particular infraID in the project

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  getInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfra": {
+      "projectID": "4",
+      "infraID": 4,
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "environmentID": "abc123",
+      "platformName": "abc123",
+      "isActive": true,
+      "isInfraConfirmed": false,
+      "isRemoved": true,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 987,
+      "token": "xyz789",
+      "infraNamespace": "abc123",
+      "serviceAccount": "xyz789",
+      "infraScope": "abc123",
+      "infraNsExists": true,
+      "infraSaExists": false,
+      "lastExperimentTimestamp": "xyz789",
+      "startTime": "xyz789",
+      "version": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraDetails +

+
+
+
+
Description
+

Returns infra details based on identifiers

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraDetails(
+  $infraID: ID!,
+  $projectID: ID!
+) {
+  getInfraDetails(
+    infraID: $infraID,
+    projectID: $projectID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"infraID": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraDetails": {
+      "projectID": "4",
+      "infraID": "4",
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "environmentID": "xyz789",
+      "platformName": "abc123",
+      "isActive": true,
+      "isInfraConfirmed": true,
+      "isRemoved": true,
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 987,
+      "token": "xyz789",
+      "infraNamespace": "abc123",
+      "serviceAccount": "abc123",
+      "infraScope": "xyz789",
+      "infraNsExists": true,
+      "infraSaExists": true,
+      "lastExperimentTimestamp": "abc123",
+      "startTime": "xyz789",
+      "version": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraManifest +

+
+
+
+
Description
+

Returns the manifest for a given infraID

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ upgrade - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraManifest(
+  $infraID: ID!,
+  $upgrade: Boolean!,
+  $projectID: ID!
+) {
+  getInfraManifest(
+    infraID: $infraID,
+    upgrade: $upgrade,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "infraID": "4",
+  "upgrade": true,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"getInfraManifest": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetInfraStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraStats($projectID: ID!) {
+  getInfraStats(projectID: $projectID) {
+    totalInfrastructures
+    totalActiveInfrastructure
+    totalInactiveInfrastructures
+    totalConfirmedInfrastructure
+    totalNonConfirmedInfrastructures
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraStats": {
+      "totalInfrastructures": 123,
+      "totalActiveInfrastructure": 987,
+      "totalInactiveInfrastructures": 123,
+      "totalConfirmedInfrastructure": 987,
+      "totalNonConfirmedInfrastructures": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getPredefinedExperiment +

+
+
+
+
Description
+

Returns predefined experiment details of selected experiments

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ experimentName - [String!]! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetPredefinedExperiment(
+  $hubID: ID!,
+  $experimentName: [String!]!,
+  $projectID: ID!
+) {
+  getPredefinedExperiment(
+    hubID: $hubID,
+    experimentName: $experimentName,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "hubID": "4",
+  "experimentName": ["abc123"],
+  "projectID": 4
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPredefinedExperiment": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "abc123",
+        "experimentManifest": "xyz789"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbe +

+
+
+
+
Description
+

Returns a single Probe based on ProbeName and various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "probeName": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbe": {
+      "projectID": "4",
+      "name": "abc123",
+      "description": "xyz789",
+      "tags": ["xyz789"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 123,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeReference +

+
+
+
+
Description
+

Returns all the reference of the Probe based on ProbeName

+
+
+
+
+
+
+
Response
+

Returns a GetProbeReferenceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeReference(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbeReference(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    totalRuns
+    recentExecutions {
+      faultName
+      mode
+      executionHistory {
+        ...ExecutionHistoryFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "probeName": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbeReference": {
+      "projectID": 4,
+      "name": "abc123",
+      "totalRuns": 123,
+      "recentExecutions": [RecentExecutions]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeYAML +

+
+
+
+
Description
+

Returns the Probe YAML based on ProbeName which can be used in ChaosEngine manifest

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - GetProbeYAMLRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeYAML(
+  $projectID: ID!,
+  $request: GetProbeYAMLRequest!
+) {
+  getProbeYAML(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": GetProbeYAMLRequest
+}
+
+ + +
+
+
Response
+ + +
{"data": {"getProbeYAML": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbesInExperimentRun +

+
+
+
+
Description
+

Returns all the Probes attached to the requested Experiment Run

+
+
+
+
+
+
+
Response
+

Returns [GetProbesInExperimentRunResponse]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - String! + +
+ faultName - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbesInExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: String!,
+  $faultName: String!
+) {
+  getProbesInExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    faultName: $faultName
+  ) {
+    probe {
+      projectID
+      name
+      description
+      tags
+      type
+      infrastructureType
+      kubernetesHTTPProperties {
+        ...KubernetesHTTPProbeFragment
+      }
+      kubernetesCMDProperties {
+        ...KubernetesCMDProbeFragment
+      }
+      k8sProperties {
+        ...K8SProbeFragment
+      }
+      promProperties {
+        ...PROMProbeFragment
+      }
+      recentExecutions {
+        ...ProbeRecentExecutionsFragment
+      }
+      referencedBy
+      updatedAt
+      createdAt
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+    }
+    mode
+    status {
+      verdict
+      description
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": 4,
+  "experimentRunID": "xyz789",
+  "faultName": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbesInExperimentRun": [
+      {
+        "probe": Probe,
+        "mode": "SOT",
+        "status": Status
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getServerVersion +

+
+
+
+
Description
+

Returns version of gql server

+
+
+
+
+
+
+
Response
+

Returns a ServerVersionResponse! +

+
+
+
+

Example

+
+
Query
+ + +
query GetServerVersion {
+  getServerVersion {
+    key
+    value
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getServerVersion": {
+      "key": "abc123",
+      "value": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getVersionDetails +

+
+
+
+
Description
+

Query to get the latest version of infra available

+
+
+
+
+
+
+
Response
+

Returns an InfraVersionDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetVersionDetails($projectID: ID!) {
+  getVersionDetails(projectID: $projectID) {
+    latestVersion
+    compatibleVersions
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getVersionDetails": {
+      "latestVersion": "abc123",
+      "compatibleVersions": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosFaults +

+
+
+
+
Description
+

List the Charts details of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [Chart!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosFaults(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listChaosFaults(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    apiVersion
+    kind
+    metadata {
+      name
+      version
+      annotations {
+        ...AnnotationFragment
+      }
+    }
+    spec {
+      displayName
+      categoryDescription
+      keywords
+      maturity
+      maintainers {
+        ...MaintainerFragment
+      }
+      minKubeVersion
+      provider {
+        ...ProviderFragment
+      }
+      links {
+        ...LinkFragment
+      }
+      faults {
+        ...FaultListFragment
+      }
+      experiments
+      chaosExpCRDLink
+      platforms
+      chaosType
+    }
+    packageInfo {
+      packageName
+      experiments {
+        ...ExperimentsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": "4", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosFaults": [
+      {
+        "apiVersion": "abc123",
+        "kind": "abc123",
+        "metadata": Metadata,
+        "spec": Spec,
+        "packageInfo": PackageInformation
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosHub +

+
+
+
+
Description
+

Lists all the connected ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [ChaosHubStatus]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListChaosHubRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosHub(
+  $projectID: ID!,
+  $request: ListChaosHubRequest
+) {
+  listChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosHub": [
+      {
+        "id": "4",
+        "repoURL": "abc123",
+        "repoBranch": "xyz789",
+        "remoteHub": "abc123",
+        "isAvailable": true,
+        "totalFaults": "abc123",
+        "totalExperiments": "xyz789",
+        "name": "xyz789",
+        "hubType": "GIT",
+        "isPrivate": true,
+        "authType": "BASIC",
+        "token": "abc123",
+        "userName": "xyz789",
+        "password": "xyz789",
+        "isRemoved": true,
+        "sshPrivateKey": "xyz789",
+        "sshPublicKey": "xyz789",
+        "lastSyncedAt": "abc123",
+        "tags": ["xyz789"],
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "createdAt": "abc123",
+        "updatedAt": "xyz789",
+        "description": "abc123",
+        "isDefault": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listEnvironments +

+
+
+
+
Response
+

Returns a ListEnvironmentResponse +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListEnvironments(
+  $projectID: ID!,
+  $request: ListEnvironmentRequest
+) {
+  listEnvironments(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfEnvironments
+    environments {
+      projectID
+      environmentID
+      name
+      description
+      tags
+      type
+      createdAt
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      updatedAt
+      isRemoved
+      infraIDs
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listEnvironments": {
+      "totalNoOfEnvironments": 987,
+      "environments": [Environment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperiment +

+
+
+
+
Description
+

Returns the list of experiments based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperiment(
+  $projectID: ID!,
+  $request: ListExperimentRequest!
+) {
+  listExperiment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperiments
+    experiments {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListExperimentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperiment": {
+      "totalNoOfExperiments": 123,
+      "experiments": [Experiment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperimentRun +

+
+
+
+
Description
+

Returns the list of experiment run based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentRunResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperimentRun(
+  $projectID: ID!,
+  $request: ListExperimentRunRequest!
+) {
+  listExperimentRun(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperimentRuns
+    experimentRuns {
+      projectID
+      experimentRunID
+      experimentType
+      experimentID
+      weightages {
+        ...WeightagesFragment
+      }
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      experimentName
+      experimentManifest
+      phase
+      resiliencyScore
+      faultsPassed
+      faultsFailed
+      faultsAwaited
+      faultsStopped
+      faultsNa
+      totalFaults
+      executionData
+      isRemoved
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+      notifyID
+      runSequence
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperimentRun": {
+      "totalNoOfExperimentRuns": 987,
+      "experimentRuns": [ExperimentRun]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listImageRegistry +

+
+
+
+
Response
+

Returns [ImageRegistryResponse!] +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListImageRegistry($projectID: String!) {
+  listImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "xyz789"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listImageRegistry": [
+      {
+        "isDefault": false,
+        "imageRegistryInfo": ImageRegistry,
+        "imageRegistryID": "abc123",
+        "projectID": "xyz789",
+        "updatedAt": "xyz789",
+        "createdAt": "abc123",
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "isRemoved": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listInfras +

+
+
+
+
Description
+

Returns infras with a particular infra type in the project

+
+
+
+
+
+
+
Response
+

Returns a ListInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListInfraRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListInfras(
+  $projectID: ID!,
+  $request: ListInfraRequest
+) {
+  listInfras(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfInfras
+    infras {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListInfraRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listInfras": {
+      "totalNoOfInfras": 987,
+      "infras": [Infra]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listPredefinedExperiments +

+
+
+
+
Description
+

List the PredefinedExperiments present in the hub

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListPredefinedExperiments(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listPredefinedExperiments(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listPredefinedExperiments": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "abc123",
+        "experimentManifest": "abc123"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listProbes +

+
+
+
+
Description
+

Returns the list of Probes based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns [Probe]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infrastructureType - InfrastructureType + +
+ probeNames - [ID!] + +
+ filter - ProbeFilterInput + +
+
+
+
+

Example

+
+
Query
+ + +
query ListProbes(
+  $projectID: ID!,
+  $infrastructureType: InfrastructureType,
+  $probeNames: [ID!],
+  $filter: ProbeFilterInput
+) {
+  listProbes(
+    projectID: $projectID,
+    infrastructureType: $infrastructureType,
+    probeNames: $probeNames,
+    filter: $filter
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infrastructureType": "Kubernetes",
+  "probeNames": [4],
+  "filter": ProbeFilterInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listProbes": [
+      {
+        "projectID": 4,
+        "name": "xyz789",
+        "description": "abc123",
+        "tags": ["xyz789"],
+        "type": "httpProbe",
+        "infrastructureType": "Kubernetes",
+        "kubernetesHTTPProperties": KubernetesHTTPProbe,
+        "kubernetesCMDProperties": KubernetesCMDProbe,
+        "k8sProperties": K8SProbe,
+        "promProperties": PROMProbe,
+        "recentExecutions": [ProbeRecentExecutions],
+        "referencedBy": 987,
+        "updatedAt": "abc123",
+        "createdAt": "abc123",
+        "updatedBy": UserDetails,
+        "createdBy": UserDetails
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ validateUniqueProbe +

+
+
+
+
Description
+

Validates if a probe is already present, returns true if unique

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ValidateUniqueProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  validateUniqueProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "probeName": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"validateUniqueProbe": true}}
+
+ + +
+
+
+
+

Mutations

+
+

+ addChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (includes the git clone operation)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  addChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addChaosHub": {
+      "id": "4",
+      "repoURL": "abc123",
+      "repoBranch": "abc123",
+      "remoteHub": "xyz789",
+      "projectID": "4",
+      "isDefault": false,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addProbe +

+
+
+
+
Description
+

Creates a new Probe

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  addProbe(
+    request: $request,
+    projectID: $projectID
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ProbeRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addProbe": {
+      "projectID": "4",
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 987,
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addRemoteChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (remote hub download)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateRemoteChaosHub! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddRemoteChaosHub(
+  $projectID: ID!,
+  $request: CreateRemoteChaosHub!
+) {
+  addRemoteChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateRemoteChaosHub
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addRemoteChaosHub": {
+      "id": 4,
+      "repoURL": "abc123",
+      "repoBranch": "xyz789",
+      "remoteHub": "xyz789",
+      "projectID": 4,
+      "isDefault": false,
+      "name": "xyz789",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "xyz789",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ chaosExperimentRun +

+
+
+
+
Description
+

Creates a new experiment run and sends it to subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - ExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ChaosExperimentRun($request: ExperimentRunRequest!) {
+  chaosExperimentRun(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": ExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"chaosExperimentRun": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ confirmInfraRegistration +

+
+
+
+
Description
+

Confirms the subscriber's registration with the control plane

+
+
+
+
+
+
+
Response
+

Returns a ConfirmInfraRegistrationResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ConfirmInfraRegistration($request: InfraIdentity!) {
+  confirmInfraRegistration(request: $request) {
+    isInfraConfirmed
+    newAccessKey
+    infraID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "confirmInfraRegistration": {
+      "isInfraConfirmed": true,
+      "newAccessKey": "xyz789",
+      "infraID": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createChaosExperiment +

+
+
+
+
Description
+

Creates a new experiment and applies its manifest

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  createChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ChaosExperimentRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createChaosExperiment": {
+      "experimentID": "xyz789",
+      "projectID": "4",
+      "cronSyntax": "abc123",
+      "experimentName": "xyz789",
+      "experimentDescription": "abc123",
+      "isCustomExperiment": true,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateEnvironment(
+  $projectID: ID!,
+  $request: CreateEnvironmentRequest
+) {
+  createEnvironment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createEnvironment": {
+      "projectID": "xyz789",
+      "environmentID": "abc123",
+      "name": "abc123",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "xyz789",
+      "isRemoved": true,
+      "infraIDs": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createImageRegistry +

+
+
+
+
Description
+

Create an Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateImageRegistry(
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  createImageRegistry(
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "abc123",
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosExperiment +

+
+
+
+
Description
+

Removes a experiment from infra

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ experimentRunID - String + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosExperiment(
+  $experimentID: String!,
+  $experimentRunID: String,
+  $projectID: ID!
+) {
+  deleteChaosExperiment(
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "abc123",
+  "experimentRunID": "xyz789",
+  "projectID": 4
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosExperiment": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosHub +

+
+
+
+
Description
+

Delete the ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ hubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosHub(
+  $projectID: ID!,
+  $hubID: ID!
+) {
+  deleteChaosHub(
+    projectID: $projectID,
+    hubID: $hubID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "hubID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosHub": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  deleteEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "environmentID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteEnvironment": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteImageRegistry +

+
+
+
+
Description
+

Delete the Image Registry

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!
+) {
+  deleteImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteImageRegistry": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteInfra +

+
+
+
+
Description
+

Disconnects an infra and deletes its configuration from the control plane

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  deleteInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteInfra": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteProbe +

+
+
+
+
Description
+

Delete a Probe

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ probeName - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteProbe(
+  $probeName: ID!,
+  $projectID: ID!
+) {
+  deleteProbe(
+    probeName: $probeName,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"probeName": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteProbe": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ disableGitOps +

+
+
+
+
Description
+

Disables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DisableGitOps($projectID: ID!) {
+  disableGitOps(projectID: $projectID)
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"disableGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ enableGitOps +

+
+
+
+
Description
+

Enables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation EnableGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  enableGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"enableGitOps": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ generateSSHKey +

+
+
+
+
Description
+

Generates Private and Public key for SSH authentication

+
+
+
+
+
+
+
Response
+

Returns an SSHKey! +

+
+
+
+

Example

+
+
Query
+ + +
mutation GenerateSSHKey {
+  generateSSHKey {
+    publicKey
+    privateKey
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "generateSSHKey": {
+      "publicKey": "xyz789",
+      "privateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ getManifestWithInfraID +

+
+
+
+
Description
+

Fetches manifest details

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+ accessKey - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GetManifestWithInfraID(
+  $projectID: ID!,
+  $infraID: String!,
+  $accessKey: String!
+) {
+  getManifestWithInfraID(
+    projectID: $projectID,
+    infraID: $infraID,
+    accessKey: $accessKey
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": 4,
+  "infraID": "xyz789",
+  "accessKey": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getManifestWithInfraID": "xyz789"
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ gitopsNotifier +

+
+
+
+
Description
+

Sends workflow run request(single run workflow only) to agent on gitops notification

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ clusterInfo - InfraIdentity! + +
+ experimentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GitopsNotifier(
+  $clusterInfo: InfraIdentity!,
+  $experimentID: ID!
+) {
+  gitopsNotifier(
+    clusterInfo: $clusterInfo,
+    experimentID: $experimentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"clusterInfo": InfraIdentity, "experimentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"gitopsNotifier": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeNamespace +

+
+
+
+
Description
+

Receives kubernetes namespace data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeNamespaceData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeNamespace($request: KubeNamespaceData!) {
+  kubeNamespace(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeNamespaceData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeNamespace": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeObj +

+
+
+
+
Description
+

Receives kubernetes object data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeObj($request: KubeObjectData!) {
+  kubeObj(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeObj": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ podLog +

+
+
+
+
Description
+

Receives pod logs for experiments from infra

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLog! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation PodLog($request: PodLog!) {
+  podLog(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLog}
+
+ + +
+
+
Response
+ + +
{"data": {"podLog": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ registerInfra +

+
+
+
+
Description
+

Connect a new infra for a user in a specified project

+
+
+
+
+
+
+
Response
+

Returns a RegisterInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - RegisterInfraRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RegisterInfra(
+  $projectID: ID!,
+  $request: RegisterInfraRequest!
+) {
+  registerInfra(
+    projectID: $projectID,
+    request: $request
+  ) {
+    token
+    infraID
+    name
+    manifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": RegisterInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "registerInfra": {
+      "token": "xyz789",
+      "infraID": "abc123",
+      "name": "abc123",
+      "manifest": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ runChaosExperiment +

+
+
+
+
Description
+

Run the chaos experiment (used by frontend)

+
+
+
+
+
+
+
Response
+

Returns a RunChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RunChaosExperiment(
+  $experimentID: String!,
+  $projectID: ID!
+) {
+  runChaosExperiment(
+    experimentID: $experimentID,
+    projectID: $projectID
+  ) {
+    notifyID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"experimentID": "abc123", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"runChaosExperiment": {"notifyID": 4}}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosExperiment +

+
+
+
+
Description
+

Saves a new experiment or updates if already exists

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - SaveChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosExperiment(
+  $request: SaveChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  saveChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"request": SaveChaosExperimentRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"saveChaosExperiment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosHub +

+
+
+
+
Description
+

Save a ChaosHub configuration without cloning it

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  saveChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "saveChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "remoteHub": "xyz789",
+      "projectID": 4,
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "abc123",
+      "updatedAt": "xyz789",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ stopExperimentRuns +

+
+
+
+
Description
+

stopExperiment will halt all the ongoing runs of a particular experiment

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+ experimentRunID - String + +
+ notifyID - String + +
+
+
+
+

Example

+
+
Query
+ + +
mutation StopExperimentRuns(
+  $projectID: ID!,
+  $experimentID: String!,
+  $experimentRunID: String,
+  $notifyID: String
+) {
+  stopExperimentRuns(
+    projectID: $projectID,
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "abc123",
+  "experimentRunID": "abc123",
+  "notifyID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"stopExperimentRuns": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ syncChaosHub +

+
+
+
+
Description
+

Sync changes from the Git repository of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ id - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SyncChaosHub(
+  $id: ID!,
+  $projectID: ID!
+) {
+  syncChaosHub(
+    id: $id,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"id": "4", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"syncChaosHub": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosExperiment +

+
+
+
+
Description
+

Updates the experiment

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  updateChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": "4",
+      "cronSyntax": "xyz789",
+      "experimentName": "abc123",
+      "experimentDescription": "xyz789",
+      "isCustomExperiment": false,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosHub +

+
+
+
+
Description
+

Update the configuration of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosHub(
+  $projectID: ID!,
+  $request: UpdateChaosHubRequest!
+) {
+  updateChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    remoteHub
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": UpdateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "remoteHub": "xyz789",
+      "projectID": 4,
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "xyz789",
+      "password": "xyz789",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateCronExperimentState +

+
+
+
+
Description
+

Enable/Disable cron experiment state

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ disable - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateCronExperimentState(
+  $experimentID: String!,
+  $disable: Boolean!,
+  $projectID: ID!
+) {
+  updateCronExperimentState(
+    experimentID: $experimentID,
+    disable: $disable,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "xyz789",
+  "disable": false,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateCronExperimentState": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateEnvironment(
+  $projectID: ID!,
+  $request: UpdateEnvironmentRequest
+) {
+  updateEnvironment(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": UpdateEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateEnvironment": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateGitOps +

+
+
+
+
Description
+

Updates gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  updateGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "configurations": GitConfig
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateImageRegistry +

+
+
+
+
Description
+

Update the Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  updateImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "abc123",
+  "projectID": "abc123",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "abc123",
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateProbe +

+
+
+
+
Description
+

Update the configuration of a Probe

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  updateProbe(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ProbeRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateProbe": "abc123"}}
+
+ + +
+
+
+
+

Subscriptions

+
+

+ getInfraEvents +

+
+
+
+
Description
+

Listens infra events from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraEventResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetInfraEvents($projectID: String!) {
+  getInfraEvents(projectID: $projectID) {
+    eventID
+    eventType
+    eventName
+    description
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "xyz789"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraEvents": {
+      "eventID": 4,
+      "eventType": "xyz789",
+      "eventName": "abc123",
+      "description": "xyz789",
+      "infra": Infra
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeNamespace +

+
+
+
+
Description
+

Returns a kubernetes namespaces given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeNamespaceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeNamespaceRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeNamespace($request: KubeNamespaceRequest!) {
+  getKubeNamespace(request: $request) {
+    infraID
+    kubeNamespace {
+      name
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeNamespaceRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeNamespace": {
+      "infraID": "4",
+      "kubeNamespace": [KubeNamespace]
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeObject +

+
+
+
+
Description
+

Returns a kubernetes object given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeObjectResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeObject($request: KubeObjectRequest!) {
+  getKubeObject(request: $request) {
+    infraID
+    kubeObj {
+      namespace
+      data {
+        ...ObjectDataFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeObject": {
+      "infraID": "4",
+      "kubeObj": KubeObject
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getPodLog +

+
+
+
+
Description
+

Returns experiment logs from the pods

+
+
+
+
+
+
+
Response
+

Returns a PodLogResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLogRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetPodLog($request: PodLogRequest!) {
+  getPodLog(request: $request) {
+    experimentRunID
+    podName
+    podType
+    log
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLogRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPodLog": {
+      "experimentRunID": 4,
+      "podName": "xyz789",
+      "podType": "xyz789",
+      "log": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ infraConnect +

+
+
+
+
Description
+

Listens infra operation request from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraActionResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription InfraConnect($request: InfraIdentity!) {
+  infraConnect(request: $request) {
+    projectID
+    action {
+      requestID
+      requestType
+      k8sManifest
+      namespace
+      externalData
+      username
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "infraConnect": {
+      "projectID": "xyz789",
+      "action": ActionPayload
+    }
+  }
+}
+
+ + +
+
+
+
+

Types

+
+

ActionPayload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
requestID - String! + +
requestType - String! + +
k8sManifest - String! + +
namespace - String! + +
externalData - String + +
username - String + +
+
+
+
+
+
Example
+ + +
{
+  "requestID": "xyz789",
+  "requestType": "abc123",
+  "k8sManifest": "abc123",
+  "namespace": "xyz789",
+  "externalData": "abc123",
+  "username": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Annotation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
categories - String! + +
vendor - String! + +
createdAt - String! + +
repository - String! + +
support - String! + +
chartDescription - String! + +
+
+
+
+
+
Example
+ + +
{
+  "categories": "abc123",
+  "vendor": "xyz789",
+  "createdAt": "xyz789",
+  "repository": "xyz789",
+  "support": "abc123",
+  "chartDescription": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Audit

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
updatedAt - String + +
createdAt - String + +
updatedBy - UserDetails + +
createdBy - UserDetails + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Audit Types
+

ExperimentRun

+
+

RecentExperimentRun

+
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

ImageRegistryResponse

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

AuthType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

BASIC

+
+
+

NONE

+
+
+

SSH

+
+
+

TOKEN

+
+
+
+
+
+
+
Example
+ + +
"BASIC"
+
+ + +
+
+
+
+
+
+ Types +
+

Boolean

+
+
+
+
Description
+

The Boolean scalar type represents true or false.

+
+
+
+
+
Example
+ + +
true
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String + ID of the experiment
+ runExperiment - Boolean + Boolean check indicating if the created scenario will be executed or not
+ experimentManifest - String! + Manifest of the experiment
+ experimentType - ExperimentType + Type of the experiment
+ cronSyntax - String! + Cron syntax of the experiment schedule
+ experimentName - String! + Name of the experiment
+ experimentDescription - String! + Description of the experiment
+ weightages - [WeightagesInput!]! + Array containing weightage and name of each chaos experiment in the experiment
+ isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
+ infraID - ID! + ID of the target infra in which the experiment will run
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "runExperiment": true,
+  "experimentManifest": "xyz789",
+  "experimentType": "All",
+  "cronSyntax": "abc123",
+  "experimentName": "abc123",
+  "experimentDescription": "abc123",
+  "weightages": [WeightagesInput],
+  "isCustomExperiment": false,
+  "infraID": "4",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentResponse

+
+
+
+
Description
+

Defines the response received for querying the details of chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + ID of the experiment
projectID - ID! + +
cronSyntax - String! + Cron syntax of the experiment schedule
experimentName - String! + Name of the experiment
experimentDescription - String! + Description of the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "projectID": 4,
+  "cronSyntax": "xyz789",
+  "experimentName": "abc123",
+  "experimentDescription": "abc123",
+  "isCustomExperiment": false,
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the chaos hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
remoteHub - String! + Connected Hub of remote repository
projectID - ID! + ID of the project in which the chaos hub is present
isDefault - Boolean! + Default Hub Identifier
name - String! + Name of the chaos hub
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
description - String + Description of ChaosHub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
isRemoved - Boolean! + Bool value indicating if the chaos hub is removed
createdAt - String! + Timestamp when the chaos hub was created
updatedAt - String! + Timestamp when the chaos hub was last updated
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
+
+
+
+
+
Example
+ + +
{
+  "id": "4",
+  "repoURL": "abc123",
+  "repoBranch": "xyz789",
+  "remoteHub": "abc123",
+  "projectID": "4",
+  "isDefault": false,
+  "name": "xyz789",
+  "tags": ["abc123"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "description": "xyz789",
+  "hubType": "GIT",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "xyz789",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789",
+  "isRemoved": true,
+  "createdAt": "abc123",
+  "updatedAt": "xyz789",
+  "lastSyncedAt": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubFilterInput

+
+
+
+
Description
+

Defines filter options for ChaosHub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubName - String + Name of the ChaosHub
+ tags - [String!] + Tags of a chaos hub
+ description - String + Description of a chaos hub
+
+
+
+
+
Example
+ + +
{
+  "chaosHubName": "abc123",
+  "tags": ["xyz789"],
+  "description": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubStatus

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
remoteHub - String! + Connected Hub of remote repository
isAvailable - Boolean! + Bool value indicating whether the hub is available or not.
totalFaults - String! + Total number of experiments in the hub
totalExperiments - String! + Total experiments
name - String! + Name of the chaos hub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
isRemoved - Boolean! + Bool value indicating whether the hub is private or not.
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
sshPublicKey - String + Public SSH key for authenticating into private chaos hub
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
createdAt - String! + Created at timestamp
updatedAt - String! + Updated at timestamp
description - String + Description of ChaosHub
isDefault - Boolean! + Default Hub Identifier
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "abc123",
+  "repoBranch": "xyz789",
+  "remoteHub": "xyz789",
+  "isAvailable": true,
+  "totalFaults": "xyz789",
+  "totalExperiments": "xyz789",
+  "name": "xyz789",
+  "hubType": "GIT",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "xyz789",
+  "isRemoved": true,
+  "sshPrivateKey": "abc123",
+  "sshPublicKey": "xyz789",
+  "lastSyncedAt": "abc123",
+  "tags": ["abc123"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "createdAt": "abc123",
+  "updatedAt": "abc123",
+  "description": "abc123",
+  "isDefault": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Chart

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
apiVersion - String! + +
kind - String! + +
metadata - Metadata! + +
spec - Spec! + +
packageInfo - PackageInformation! + +
+
+
+
+
+
Example
+ + +
{
+  "apiVersion": "xyz789",
+  "kind": "abc123",
+  "metadata": Metadata,
+  "spec": Spec,
+  "packageInfo": PackageInformation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CommonProbeProperties

+
+
+
+
Description
+

Defines the common probe properties shared across different ProbeTypes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + +
CommonProbeProperties Types
+

KubernetesCMDProbe

+
+

PROMProbe

+
+

KubernetesHTTPProbe

+
+

K8SProbe

+
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Comparator

+
+
+
+
Description
+

Defines the properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
type - String! + Type of the Comparator
value - String! + Value of the Comparator
criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "abc123",
+  "value": "abc123",
+  "criteria": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ComparatorInput

+
+
+
+
Description
+

Defines the input properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ type - String! + Type of the Comparator
+ value - String! + Value of the Comparator
+ criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "xyz789",
+  "value": "abc123",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ConfirmInfraRegistrationResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isInfraConfirmed - Boolean! + +
newAccessKey - String + +
infraID - String + +
+
+
+
+
+
Example
+ + +
{
+  "isInfraConfirmed": true,
+  "newAccessKey": "xyz789",
+  "infraID": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateChaosHubRequest

+
+
+
+
Description
+

Defines the details required for creating a chaos hub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ remoteHub - String! + Connected Hub of remote repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "tags": ["abc123"],
+  "description": "xyz789",
+  "repoURL": "abc123",
+  "repoBranch": "xyz789",
+  "remoteHub": "xyz789",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "xyz789",
+  "sshPrivateKey": "abc123",
+  "sshPublicKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String! + +
+ type - EnvironmentType! + +
+ description - String + +
+ tags - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "xyz789",
+  "type": "PROD",
+  "description": "xyz789",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateRemoteChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ remoteHub - String! + Connected Hub of remote repository
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "tags": ["abc123"],
+  "description": "xyz789",
+  "repoURL": "abc123",
+  "remoteHub": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

DateRange

+
+
+
+
Description
+

Defines the start date and end date for the filtering the data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ startDate - String! + Start date
+ endDate - String + End date
+
+
+
+
+
Example
+ + +
{
+  "startDate": "xyz789",
+  "endDate": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Environment

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
environmentID - String! + +
name - String! + +
description - String + +
tags - [String!] + +
type - EnvironmentType! + +
createdAt - String! + +
createdBy - UserDetails + +
updatedBy - UserDetails + +
updatedAt - String! + +
isRemoved - Boolean + +
infraIDs - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "abc123",
+  "environmentID": "xyz789",
+  "name": "xyz789",
+  "description": "abc123",
+  "tags": ["xyz789"],
+  "type": "PROD",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "updatedAt": "xyz789",
+  "isRemoved": true,
+  "infraIDs": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the environment
+ description - String + ID of the environment
+ type - EnvironmentType + Type name of environment
+ tags - [String!] + Tags of an environment
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "description": "abc123",
+  "type": "PROD",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - EnvironmentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": false}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

PROD

+
+
+

NON_PROD

+
+
+
+
+
+
+
Example
+ + +
"PROD"
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutedByExperiment

+
+
+
+
Description
+

Defines the Executed by which experiment details for Probes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + Experiment ID
experimentName - String! + Experiment Name
updatedAt - Int! + Timestamp at which the experiment was last updated
updatedBy - UserDetails + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "experimentName": "abc123",
+  "updatedAt": 123,
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutionHistory

+
+
+
+
Description
+

Defines the Execution History of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
mode - Mode! + Probe Mode
faultName - String! + Fault Name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "mode": "SOT",
+  "faultName": "xyz789",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Experiment

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentID - String! + ID of the experiment
experimentType - String + Type of the experiment
experimentManifest - String! + Manifest of the experiment
cronSyntax - String! + Cron syntax of the experiment schedule
name - String! + Name of the experiment
description - String! + Description of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
infra - Infra + Target infra in which the experiment will run
isRemoved - Boolean! + Bool value indicating if the experiment has removed
tags - [String!] + Tags of the experiment
createdBy - UserDetails + User who created the experiment
recentExperimentRunDetails - [RecentExperimentRun] + Array of object containing details of recent experiment runs
updatedBy - UserDetails + Details of the user who updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "experimentID": "abc123",
+  "experimentType": "abc123",
+  "experimentManifest": "xyz789",
+  "cronSyntax": "abc123",
+  "name": "abc123",
+  "description": "xyz789",
+  "weightages": [Weightages],
+  "isCustomExperiment": false,
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "infra": Infra,
+  "isRemoved": false,
+  "tags": ["abc123"],
+  "createdBy": UserDetails,
+  "recentExperimentRunDetails": [RecentExperimentRun],
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentFilterInput

+
+
+
+
Description
+

Defines filter options for experiments

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraName - String + Name of the infra in which the experiment is running
+ infraID - String + ID of the infra in which the experiment is running
+ infraActive - Boolean + Bool value indicating if Chaos Infrastructure is active
+ scheduleType - ScheduleType + Scenario type of the experiment i.e. CRON or NON_CRON
+ status - String + Status of the latest experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraName": "xyz789",
+  "infraID": "xyz789",
+  "infraActive": false,
+  "scheduleType": "CRON",
+  "status": "xyz789",
+  "dateRange": DateRange,
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ category - String! + Name of the chart being used
+ experimentName - String! + Name of the experiment
+ hubID - String! + ID of the hub
+
+
+
+
+
Example
+ + +
{
+  "category": "abc123",
+  "experimentName": "abc123",
+  "hubID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRun

+
+
+
+
Description
+

Defines the details of a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentRunID - ID! + ID of the experiment run which is to be queried
experimentType - String + Type of the experiment
experimentID - ID! + ID of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
updatedAt - String! + Timestamp at which experiment run was last updated
createdAt - String! + Timestamp at which experiment run was created
infra - Infra! + Target infra in which the experiment will run
experimentName - String! + Name of the experiment
experimentManifest - String! + Manifest of the experiment run
phase - ExperimentRunStatus! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
faultsPassed - Int + Number of faults passed
faultsFailed - Int + Number of faults failed
faultsAwaited - Int + Number of faults awaited
faultsStopped - Int + Number of faults stopped
faultsNa - Int + Number of faults which are not available
totalFaults - Int + Total number of faults
executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the faults
isRemoved - Boolean + Bool value indicating if the experiment run has removed
updatedBy - UserDetails + User who has updated the experiment
createdBy - UserDetails + User who has created the experiment run
notifyID - ID + Notify ID of the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "experimentRunID": "4",
+  "experimentType": "xyz789",
+  "experimentID": 4,
+  "weightages": [Weightages],
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "infra": Infra,
+  "experimentName": "xyz789",
+  "experimentManifest": "abc123",
+  "phase": "All",
+  "resiliencyScore": 987.65,
+  "faultsPassed": 123,
+  "faultsFailed": 123,
+  "faultsAwaited": 123,
+  "faultsStopped": 123,
+  "faultsNa": 987,
+  "totalFaults": 123,
+  "executionData": "xyz789",
+  "isRemoved": false,
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails,
+  "notifyID": "4",
+  "runSequence": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunFilterInput

+
+
+
+
Description
+

Defines input type for experiment run filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraID - String + Name of the infra infra
+ experimentType - ScheduleType + Type of the experiment
+ experimentStatus - ExperimentRunStatus + Status of the experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ experimentRunID - String + ID of experiment run
+ experimentRunStatus - [String] + Array of experiment run status
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "abc123",
+  "infraID": "abc123",
+  "experimentType": "CRON",
+  "experimentStatus": "All",
+  "dateRange": DateRange,
+  "experimentRunID": "xyz789",
+  "experimentRunStatus": ["xyz789"],
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunRequest

+
+
+
+
Description
+

Defines the details for a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String! + ID of the experiment
+ notifyID - String + notifyID is required to give an ack for non cron experiment execution
+ experimentRunID - String! + ID of the experiment run which is to be queried
+ experimentName - String! + Name of the experiment
+ executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the experiments
+ infraID - InfraIdentity! + ID of the infra infra in which the experiment is running
+ revisionID - String! + ID of the revision which consists manifest details
+ completed - Boolean! + Bool value indicating if the experiment run has completed
+ isRemoved - Boolean + Bool value indicating if the experiment run has removed
+ updatedBy - String! + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "notifyID": "xyz789",
+  "experimentRunID": "xyz789",
+  "experimentName": "abc123",
+  "executionData": "xyz789",
+  "infraID": InfraIdentity,
+  "revisionID": "abc123",
+  "completed": false,
+  "isRemoved": false,
+  "updatedBy": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunSortInput

+
+
+
+
Description
+

Defines sorting options for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": false}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunStatus

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Running

+
+
+

Completed

+
+
+

Completed_With_Error

+
+
+

Stopped

+
+
+

Skipped

+
+
+

Error

+
+
+

Timeout

+
+
+

Terminated

+
+
+

Queued

+
+
+

NA

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Experiment

+
+
+

CronExperiment

+
+
+

ChaosEngine

+
+
+

ChaosSchedule

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

Experiments

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
CSV - String! + +
desc - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "CSV": "abc123",
+  "desc": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultDetails

+
+
+
+
Description
+

Fault Detail consists of all the fault related details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
fault - String! + fault consists of fault.yaml
engine - String! + engine consists engine.yaml
csv - String! + csv consists chartserviceversion.yaml
+
+
+
+
+
Example
+ + +
{
+  "fault": "xyz789",
+  "engine": "abc123",
+  "csv": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
displayName - String! + +
description - String! + +
plan - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "displayName": "abc123",
+  "description": "xyz789",
+  "plan": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Float

+
+
+
+
Description
+

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

+
+
+
+
+
Example
+ + +
987.65
+
+ + +
+
+
+
+
+
+ Types +
+

GET

+
+
+
+
Description
+

Details of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GETRequest

+
+
+
+
Description
+

Details for input of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetChaosHubStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
totalChaosHubs - Int! + Total number of chaoshubs
+
+
+
+
+
Example
+ + +
{"totalChaosHubs": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentResponse

+
+
+
+
Description
+

Defines the details for a given experiment with some additional data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
experimentDetails - Experiment! + Details of experiment
averageResiliencyScore - Float + Average resiliency score of the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentDetails": Experiment,
+  "averageResiliencyScore": 987.65
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentRunStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperimentRuns - Int! + Total number of experiment runs
totalCompletedExperimentRuns - Int! + Total number of completed experiments runs
totalTerminatedExperimentRuns - Int! + Total number of stopped experiment runs
totalRunningExperimentRuns - Int! + Total number of running experiment runs
totalStoppedExperimentRuns - Int! + Total number of stopped experiment runs
totalErroredExperimentRuns - Int! + Total number of errored experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalExperimentRuns": 123,
+  "totalCompletedExperimentRuns": 987,
+  "totalTerminatedExperimentRuns": 987,
+  "totalRunningExperimentRuns": 987,
+  "totalStoppedExperimentRuns": 123,
+  "totalErroredExperimentRuns": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperiments - Int! + Total number of experiments
totalExpCategorizedByResiliencyScore - [ResilienceScoreCategory]! + Total number of cron experiments
+
+
+
+
+
Example
+ + +
{
+  "totalExperiments": 987,
+  "totalExpCategorizedByResiliencyScore": [
+    ResilienceScoreCategory
+  ]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetInfraStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalInfrastructures - Int! + Total number of infrastructures
totalActiveInfrastructure - Int! + Total number of active infrastructures
totalInactiveInfrastructures - Int! + Total number of inactive infrastructures
totalConfirmedInfrastructure - Int! + Total number of confirmed infrastructures
totalNonConfirmedInfrastructures - Int! + Total number of non confirmed infrastructures
+
+
+
+
+
Example
+ + +
{
+  "totalInfrastructures": 987,
+  "totalActiveInfrastructure": 123,
+  "totalInactiveInfrastructures": 123,
+  "totalConfirmedInfrastructure": 987,
+  "totalNonConfirmedInfrastructures": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeReferenceResponse

+
+
+
+
Description
+

Defines the response of the Probe reference API

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
totalRuns - Int! + Total Runs
recentExecutions - [RecentExecutions]! + Recent Executions of the probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "xyz789",
+  "totalRuns": 987,
+  "recentExecutions": [RecentExecutions]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeYAMLRequest

+
+
+
+
Description
+

Defines the input requests for GetProbeYAML query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeName - ID! + Probe name of the probe
+ mode - Mode! + Mode of the Probe (SoT, EoT, Edge, Continuous or OnChaos)
+
+
+
+
+
Example
+ + +
{"probeName": 4, "mode": "SOT"}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbesInExperimentRunResponse

+
+
+
+
Description
+

Defines the response for Get Probe In Experiment Run Query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probe - Probe! + Probe Object
mode - Mode! + Mode of the probe
status - Status! + Status of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probe": Probe,
+  "mode": "SOT",
+  "status": Status
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfig

+
+
+
+
Description
+

Details of setting a Git repository

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ branch - String! + Git branch where the chaos charts will be pushed and synced
+ repoURL - String! + URL of the Git repository
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token used for private repository
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "branch": "abc123",
+  "repoURL": "xyz789",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfigResponse

+
+
+
+
Description
+

Response received after configuring GitOps

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
enabled - Boolean! + Bool value indicating whether GitOps is enabled or not
projectID - String! + ID of the project where GitOps is configured
branch - String + Git branch where the chaos charts will be pushed and synced
repoURL - String + URL of the Git repository
authType - AuthType + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token used for private repository
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "enabled": false,
+  "projectID": "abc123",
+  "branch": "xyz789",
+  "repoURL": "abc123",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

HubType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

GIT

+
+
+

REMOTE

+
+
+
+
+
+
+
Example
+ + +
"GIT"
+
+ + +
+
+
+
+
+
+ Types +
+

ID

+
+
+
+
Description
+

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

+
+
+
+
+
Example
+ + +
"4"
+
+ + +
+
+
+
+
+
+ Types +
+

INFRA_SCOPE

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

namespace

+
+
+

cluster

+
+
+
+
+
+
+
Example
+ + +
"namespace"
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistry

+
+
+
+
Description
+

Defines details for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryName - String! + Name of Image Registry
imageRepoName - String! + Name of image repository
imageRegistryType - String! + Type of the image registry: public/private
secretName - String + Secret which is used for private registry
secretNamespace - String + Namespace where the secret is available
enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": false,
+  "imageRegistryName": "abc123",
+  "imageRepoName": "abc123",
+  "imageRegistryType": "xyz789",
+  "secretName": "abc123",
+  "secretNamespace": "xyz789",
+  "enableRegistry": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryInput

+
+
+
+
Description
+

Defines input data for querying the details of an image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
+ imageRegistryName - String! + Name of Image Registry
+ imageRepoName - String! + Name of image repository
+ imageRegistryType - String! + Type of the image registry: public/private
+ secretName - String + Secret which is used for private registry
+ secretNamespace - String + Namespace where the secret is available
+ enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryName": "xyz789",
+  "imageRepoName": "abc123",
+  "imageRegistryType": "abc123",
+  "secretName": "xyz789",
+  "secretNamespace": "abc123",
+  "enableRegistry": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryResponse

+
+
+
+
Description
+

Defines response data for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryInfo - ImageRegistry + Information Image Registry
imageRegistryID - String! + ID of the image registry
projectID - String! + ID of the project in which image registry is created
updatedAt - String + Timestamp when the image registry was last updated
createdAt - String + Timestamp when the image registry was created
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
isRemoved - Boolean + Bool value indicating if the image registry has been removed
+
+
+
+
+
Example
+ + +
{
+  "isDefault": false,
+  "imageRegistryInfo": ImageRegistry,
+  "imageRegistryID": "xyz789",
+  "projectID": "xyz789",
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "isRemoved": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Infra

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
infraID - ID! + ID of the infra
name - String! + Name of the infra
description - String + Description of the infra
tags - [String!] + Tags of the infra
environmentID - String! + Environment ID for the infra
platformName - String! + Infra Platform Name eg. GKE,AWS, Others
isActive - Boolean! + Boolean value indicating if chaos infrastructure is active or not
isInfraConfirmed - Boolean! + Boolean value indicating if chaos infrastructure is confirmed or not
isRemoved - Boolean! + Boolean value indicating if chaos infrastructure is removed or not
updatedAt - String! + Timestamp when the infra was last updated
createdAt - String! + Timestamp when the infra was created
noOfExperiments - Int + Number of schedules created in the infra
noOfExperimentRuns - Int + Number of experiments run in the infra
token - String! + Token used to verify and retrieve the infra manifest
infraNamespace - String + Namespace where the infra is being installed
serviceAccount - String + Name of service account used by infra
infraScope - String! + Scope of the infra : ns or cluster
infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
lastExperimentTimestamp - String + Timestamp of the last experiment run in the infra
startTime - String! + Timestamp when the infra got connected
version - String! + Version of the infra
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
infraType - InfrastructureType + Type of the infrastructure
updateStatus - UpdateStatus! + update status of infra
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "infraID": "4",
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "environmentID": "abc123",
+  "platformName": "abc123",
+  "isActive": false,
+  "isInfraConfirmed": true,
+  "isRemoved": false,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "noOfExperiments": 123,
+  "noOfExperimentRuns": 987,
+  "token": "abc123",
+  "infraNamespace": "abc123",
+  "serviceAccount": "abc123",
+  "infraScope": "xyz789",
+  "infraNsExists": true,
+  "infraSaExists": true,
+  "lastExperimentTimestamp": "xyz789",
+  "startTime": "abc123",
+  "version": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "infraType": "Kubernetes",
+  "updateStatus": "AVAILABLE"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraActionResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
action - ActionPayload! + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "xyz789",
+  "action": ActionPayload
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraEventResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
eventID - ID! + +
eventType - String! + +
eventName - String! + +
description - String! + +
infra - Infra! + +
+
+
+
+
+
Example
+ + +
{
+  "eventID": 4,
+  "eventType": "xyz789",
+  "eventName": "xyz789",
+  "description": "xyz789",
+  "infra": Infra
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the infra
+ infraID - String + ID of the infra
+ description - String + ID of the infra
+ platformName - String + Platform name of infra
+ infraScope - INFRA_SCOPE + Scope of infra
+ isActive - Boolean + Status of infra
+ tags - [String] + Tags of an infra
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "infraID": "xyz789",
+  "description": "xyz789",
+  "platformName": "abc123",
+  "infraScope": "namespace",
+  "isActive": false,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraIdentity

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - String! + +
+ accessKey - String! + +
+ version - String! + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "xyz789",
+  "accessKey": "xyz789",
+  "version": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraVersionDetails

+
+
+
+
Description
+

InfraVersionDetails returns the details of compatible infra versions and the latest infra version supported

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
latestVersion - String! + Latest infra version supported
compatibleVersions - [String!]! + List of all infra versions supported
+
+
+
+
+
Example
+ + +
{
+  "latestVersion": "xyz789",
+  "compatibleVersions": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfrastructureType

+
+
+
+
Values
+ + + + + + + + + + + + + +
Enum ValueDescription
+

Kubernetes

+
+
+
+
+
+
+
Example
+ + +
"Kubernetes"
+
+ + +
+
+
+
+
+
+ Types +
+

Int

+
+
+
+
Description
+

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

+
+
+
+
+
Example
+ + +
987
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbe

+
+
+
+
Description
+

Defines the K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
group - String + Group of the Probe
version - String! + Version of the Probe
resource - String! + Resource of the Probe
namespace - String + Namespace of the Probe
resourceNames - String + Resource Names of the Probe
fieldSelector - String + Field Selector of the Probe
labelSelector - String + Label Selector of the Probe
operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "group": "xyz789",
+  "version": "abc123",
+  "resource": "abc123",
+  "namespace": "xyz789",
+  "resourceNames": "xyz789",
+  "fieldSelector": "abc123",
+  "labelSelector": "xyz789",
+  "operation": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbeRequest

+
+
+
+
Description
+

Defines the input for K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ group - String + Group of the Probe
+ version - String! + Version of the Probe
+ resource - String! + Resource of the Probe
+ namespace - String + Namespace of the Probe
+ resourceNames - String + Resource Names of the Probe
+ fieldSelector - String + Field Selector of the Probe
+ labelSelector - String + Label Selector of the Probe
+ operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "group": "xyz789",
+  "version": "abc123",
+  "resource": "xyz789",
+  "namespace": "xyz789",
+  "resourceNames": "xyz789",
+  "fieldSelector": "abc123",
+  "labelSelector": "xyz789",
+  "operation": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeGVRRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ group - String! + +
+ version - String! + +
+ resource - String! + +
+
+
+
+
+
Example
+ + +
{
+  "group": "xyz789",
+  "version": "xyz789",
+  "resource": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespace

+
+
+
+
Description
+

Define name in the infra (not really useful at the moment but maybe we will need other field later)

+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the namespace
+
+
+
+
+
Example
+ + +
{"name": "abc123"}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespaceData

+
+
+
+
Description
+

Defines the details of Kubernetes namespace

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes namespace details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes namespace is present
+ kubeNamespace - String! + List of KubeNamespace return by subscriber
+
+
+
+
+
Example
+ + +
{
+  "requestID": 4,
+  "infraID": InfraIdentity,
+  "kubeNamespace": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespaceRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes namespace data

+
+
+
Fields
+ + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra
+
+
+
+
+
Example
+ + +
{"infraID": "4"}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeNamespaceResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Namespaces

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes namespace is present
kubeNamespace - [KubeNamespace]! + List of the Kubernetes namespace
+
+
+
+
+
Example
+ + +
{"infraID": 4, "kubeNamespace": [KubeNamespace]}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObject

+
+
+
+
Description
+

KubeObject consists of the available resources in a namespace

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
namespace - String! + Namespace of the resource
data - [ObjectData]! + Details of the resource
+
+
+
+
+
Example
+ + +
{
+  "namespace": "xyz789",
+  "data": [ObjectData]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectData

+
+
+
+
Description
+

Defines the details of Kubernetes object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes object details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes object is present
+ kubeObj - String! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "requestID": 4,
+  "infraID": InfraIdentity,
+  "kubeObj": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes object data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra in which the Kubernetes object is present
+ kubeObjRequest - KubeGVRRequest + GVR Request
+ namespace - String! + Namespace in which the Kubernetes object is present
+ objectType - String! + +
+ workloads - [Workload] + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": 4,
+  "kubeObjRequest": KubeGVRRequest,
+  "namespace": "abc123",
+  "objectType": "xyz789",
+  "workloads": [Workload]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes object is present
kubeObj - KubeObject! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "kubeObj": KubeObject
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbe

+
+
+
+
Description
+

Defines the CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
command - String! + Command of the Probe
comparator - Comparator! + Comparator of the Probe
source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "command": "abc123",
+  "comparator": Comparator,
+  "source": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ command - String! + Command of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+ source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "command": "abc123",
+  "comparator": ComparatorInput,
+  "source": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbe

+
+
+
+
Description
+

Defines the Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
url - String! + URL of the Probe
method - Method! + HTTP method of the Probe
insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "url": "abc123",
+  "method": Method,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ url - String! + URL of the Probe
+ method - MethodRequest! + HTTP method of the Probe
+ insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "url": "abc123",
+  "method": MethodRequest,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+ +
+
+ Types +
+

ListChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubIDs - [ID!] + Array of ChaosHub IDs for which details will be fetched
+ filter - ChaosHubFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "chaosHubIDs": ["4"],
+  "filter": ChaosHubFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - EnvironmentFilterInput + Details for fetching filtered data
+ sort - EnvironmentSortInput + Details for fetching sorted data
+
+
+
+
+
Example
+ + +
{
+  "environmentIDs": [4],
+  "pagination": Pagination,
+  "filter": EnvironmentFilterInput,
+  "sort": EnvironmentSortInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfEnvironments - Int! + Total number of environment
environments - [Environment] + +
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfEnvironments": 987,
+  "environments": [Environment]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRequest

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentSortInput + Details for fetching sorted data
+ filter - ExperimentFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentIDs": ["4"],
+  "pagination": Pagination,
+  "sort": ExperimentSortInput,
+  "filter": ExperimentFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentResponse

+
+
+
+
Description
+

Defines the details for a experiment with total experiment count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperiments - Int! + Total number of experiments
experiments - [Experiment]! + Details related to the experiments
+
+
+
+
+
Example
+ + +
{"totalNoOfExperiments": 987, "experiments": [Experiment]}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunRequest

+
+
+
+
Description
+

Defines the details for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentRunIDs - [ID] + Array of experiment run IDs for which details will be fetched
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentRunSortInput + Details for fetching sorted data
+ filter - ExperimentRunFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentRunIDs": [4],
+  "experimentIDs": [4],
+  "pagination": Pagination,
+  "sort": ExperimentRunSortInput,
+  "filter": ExperimentRunFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunResponse

+
+
+
+
Description
+

Defines the details of a experiment to sent as response

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperimentRuns - Int! + Total number of experiment runs
experimentRuns - [ExperimentRun]! + Defines details of experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfExperimentRuns": 987,
+  "experimentRuns": [ExperimentRun]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraRequest

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraIDs - [ID!] + Array of infra IDs for which details will be fetched
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - InfraFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "infraIDs": ["4"],
+  "environmentIDs": ["4"],
+  "pagination": Pagination,
+  "filter": InfraFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraResponse

+
+
+
+
Description
+

Defines the details for a infras with total infras count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfInfras - Int! + Total number of infras
infras - [Infra]! + Details related to the infras
+
+
+
+
+
Example
+ + +
{"totalNoOfInfras": 987, "infras": [Infra]}
+
+ + +
+
+
+
+
+
+ Types +
+

Maintainer

+
+
+
+
Description
+

Defines the details of the maintainer

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the maintainer
email - String! + Email of the maintainer
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Metadata

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
version - String! + +
annotations - Annotation! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "version": "abc123",
+  "annotations": Annotation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Method

+
+
+
+
Description
+

Defines the methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
get - GET + A GET request
post - POST + A POST request
+
+
+
+
+
Example
+ + +
{"get": GET, "post": POST}
+
+ + +
+
+
+
+
+
+ Types +
+

MethodRequest

+
+
+
+
Description
+

Defines the input for methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ get - GETRequest + A GET request
+ post - POSTRequest + A POST request
+
+
+
+
+
Example
+ + +
{
+  "get": GETRequest,
+  "post": POSTRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Mode

+
+
+
+
Description
+

Defines the different modes of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

SOT

+
+
+

EOT

+
+
+

Edge

+
+
+

Continuous

+
+
+

OnChaos

+
+
+
+
+
+
+
Example
+ + +
"SOT"
+
+ + +
+
+
+
+
+
+ Types +
+

ObjectData

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
labels - [String!] + Labels present in the resource
name - String! + Name of the resource
+
+
+
+
+
Example
+ + +
{
+  "labels": ["abc123"],
+  "name": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POST

+
+
+
+
Description
+

Details of POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
contentType - String + Content Type of the request
body - String + Body of the request
bodyPath - String + Body Path of the HTTP body required for the http post request
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "abc123",
+  "body": "abc123",
+  "bodyPath": "xyz789",
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POSTRequest

+
+
+
+
Description
+

Details for input of the POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ contentType - String + Content Type of the request
+ body - String + Body of the request
+ bodyPath - String + Body Path of the request for Body
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "xyz789",
+  "body": "abc123",
+  "bodyPath": "xyz789",
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbe

+
+
+
+
Description
+

Defines the PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
endpoint - String! + Endpoint of the Probe
query - String + Query of the Probe
queryPath - String + Query path of the Probe
comparator - Comparator! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "endpoint": "abc123",
+  "query": "xyz789",
+  "queryPath": "abc123",
+  "comparator": Comparator
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbeRequest

+
+
+
+
Description
+

Defines the input for PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ endpoint - String! + Endpoint of the Probe
+ query - String + Query of the Probe
+ queryPath - String + Query path of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "endpoint": "abc123",
+  "query": "xyz789",
+  "queryPath": "abc123",
+  "comparator": ComparatorInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PackageInformation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
packageName - String! + +
experiments - [Experiments!]! + +
+
+
+
+
+
Example
+ + +
{
+  "packageName": "xyz789",
+  "experiments": [Experiments]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Pagination

+
+
+
+
Description
+

Defines data required to fetch paginated data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ page - Int! + Page number for which data will be fetched
+ limit - Int! + Number of data to be fetched
+
+
+
+
+
Example
+ + +
{"page": 987, "limit": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLog

+
+
+
+
Description
+

Response received for querying pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - InfraIdentity! + ID of the cluster
+ requestID - ID! + Unique request ID of a particular node which is being queried
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podType - String! + Type of the pod: chaosengine
+ log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "infraID": InfraIdentity,
+  "requestID": "4",
+  "experimentRunID": 4,
+  "podName": "abc123",
+  "podType": "abc123",
+  "log": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogRequest

+
+
+
+
Description
+

Defines the details for fetching the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the cluster
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podNamespace - String! + Namespace where the pod is running
+ podType - String! + Type of the pod: chaosEngine or not pod
+ expPod - String + Name of the experiment pod fetched from execution data
+ runnerPod - String + Name of the runner pod fetched from execution data
+ chaosNamespace - String + Namespace where the experiment is executing
+
+
+
+
+
Example
+ + +
{
+  "infraID": 4,
+  "experimentRunID": "4",
+  "podName": "abc123",
+  "podNamespace": "xyz789",
+  "podType": "abc123",
+  "expPod": "abc123",
+  "runnerPod": "abc123",
+  "chaosNamespace": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogResponse

+
+
+
+
Description
+

Defines the response received for querying querying the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
podName - String! + Name of the pod for which logs are queried
podType - String! + Type of the pod: chaosengine
log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": 4,
+  "podName": "abc123",
+  "podType": "abc123",
+  "log": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PredefinedExperimentList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentName - String! + Name of the experiment
experimentCSV - String! + Experiment CSV
experimentManifest - String! + Experiment Manifest
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "experimentCSV": "xyz789",
+  "experimentManifest": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Probe

+
+
+
+
Description
+

Defines the details of the Probe entity

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
description - String + Description of the Probe
tags - [String!] + Tags of the Probe
type - ProbeType! + Type of the Probe [From list of ProbeType enum]
infrastructureType - InfrastructureType! + Infrastructure type of the Probe
kubernetesHTTPProperties - KubernetesHTTPProbe + Kubernetes HTTP Properties of the specific type of the Probe
kubernetesCMDProperties - KubernetesCMDProbe + Kubernetes CMD Properties of the specific type of the Probe
k8sProperties - K8SProbe + K8S Properties of the specific type of the Probe
promProperties - PROMProbe + PROM Properties of the specific type of the Probe
recentExecutions - [ProbeRecentExecutions!] + All execution histories of the probe
referencedBy - Int + Referenced by how many faults
updatedAt - String! + Timestamp at which the Probe was last updated
createdAt - String! + Timestamp at which the Probe was created
updatedBy - UserDetails + User who has updated the Probe
createdBy - UserDetails + User who has created the Probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbe,
+  "kubernetesCMDProperties": KubernetesCMDProbe,
+  "k8sProperties": K8SProbe,
+  "promProperties": PROMProbe,
+  "recentExecutions": [ProbeRecentExecutions],
+  "referencedBy": 987,
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeFilterInput

+
+
+
+
Description
+

Defines the input for Probe filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the Probe
+ dateRange - DateRange + Date range for filtering purpose
+ type - [ProbeType] + Type of the Probe [From list of ProbeType enum]
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "dateRange": DateRange,
+  "type": ["httpProbe"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of global probe in ListProbe API with different fault and execution history each time

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "faultName": "abc123",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRequest

+
+
+
+
Description
+

Defines the details required for creating a Chaos Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - ID! + Name of the Probe
+ description - String + Description of the Probe
+ tags - [String!] + Tags of the Probe
+ type - ProbeType! + Type of the Probe [From list of ProbeType enum]
+ infrastructureType - InfrastructureType! + Infrastructure type of the Probe
+ kubernetesHTTPProperties - KubernetesHTTPProbeRequest + HTTP Properties of the specific type of the Probe
+ kubernetesCMDProperties - KubernetesCMDProbeRequest + CMD Properties of the specific type of the Probe
+ k8sProperties - K8SProbeRequest + K8S Properties of the specific type of the Probe
+ promProperties - PROMProbeRequest + PROM Properties of the specific type of the Probe
+
+
+
+
+
Example
+ + +
{
+  "name": "4",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbeRequest,
+  "kubernetesCMDProperties": KubernetesCMDProbeRequest,
+  "k8sProperties": K8SProbeRequest,
+  "promProperties": PROMProbeRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeType

+
+
+
+
Description
+

Defines the different types of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

httpProbe

+
+
+

cmdProbe

+
+
+

promProbe

+
+
+

k8sProbe

+
+
+
+
+
+
+
Example
+ + +
"httpProbe"
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeVerdict

+
+
+
+
Description
+

Defines the older different statuses of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

Passed

+
+
+

Failed

+
+
+

NA

+
+
+

Awaited

+
+
+
+
+
+
+
Example
+ + +
"Passed"
+
+ + +
+
+
+
+
+
+ Types +
+

Provider

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + +
+
+
+
+
+
Example
+ + +
{"name": "xyz789"}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
mode - Mode! + Probe mode
executionHistory - [ExecutionHistory!]! + Execution History
+
+
+
+
+
Example
+ + +
{
+  "faultName": "xyz789",
+  "mode": "SOT",
+  "executionHistory": [ExecutionHistory]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExperimentRun

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
phase - String! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
createdBy - UserDetails + User who created the experiment run
updatedBy - UserDetails + User who updated the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "phase": "xyz789",
+  "resiliencyScore": 123.45,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "runSequence": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraRequest

+
+
+
+
Description
+

Defines the details for the new infra being connected

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the infra
+ environmentID - String! + Environment ID for the infra
+ infrastructureType - InfrastructureType! + Type of Infra : internal/external
+ description - String + Description of the infra
+ platformName - String! + Infra Platform Name eg. GKE,AWS, Others
+ infraNamespace - String + Namespace where the infra is being installed
+ serviceAccount - String + Name of service account used by infra
+ infraScope - String! + Scope of the infra : ns or infra
+ infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
+ infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
+ skipSsl - Boolean + Bool value indicating whether infra will skip ssl checks or not
+ nodeSelector - String + Node selectors used by infra
+ tolerations - [Toleration] + Node tolerations used by infra
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "environmentID": "xyz789",
+  "infrastructureType": "Kubernetes",
+  "description": "xyz789",
+  "platformName": "abc123",
+  "infraNamespace": "xyz789",
+  "serviceAccount": "abc123",
+  "infraScope": "xyz789",
+  "infraNsExists": true,
+  "infraSaExists": true,
+  "skipSsl": true,
+  "nodeSelector": "xyz789",
+  "tolerations": [Toleration],
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraResponse

+
+
+
+
Description
+

Response received for registering a new infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
token - String! + Token used to verify and retrieve the infra manifest
infraID - String! + Unique ID for the newly registered infra
name - String! + Infra name as sent in request
manifest - String! + Infra Manifest
+
+
+
+
+
Example
+ + +
{
+  "token": "xyz789",
+  "infraID": "xyz789",
+  "name": "abc123",
+  "manifest": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ResilienceScoreCategory

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
id - Int! + Lower bound of the range(inclusive)
count - Int! + total experiments with avg resilience score between lower bound and upper bound(exclusive)
+
+
+
+
+
Example
+ + +
{"id": 987, "count": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

ResourceDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
description - String + +
tags - [String!] + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceDetails Types
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RunChaosExperimentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
notifyID - ID! + +
+
+
+
+
+
Example
+ + +
{"notifyID": 4}
+
+ + +
+
+
+
+
+
+ Types +
+

SSHKey

+
+
+
+
Description
+

Defines the SSHKey details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
publicKey - String! + Public SSH key authenticating into git repository
privateKey - String! + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "publicKey": "xyz789",
+  "privateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

SaveChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the experiment
+ type - ExperimentType + Type of the experiment
+ name - String! + Name of the experiment
+ description - String! + Description of the experiment
+ manifest - String! + Manifest of the experiment
+ infraID - ID! + ID of the target infrastructure in which the experiment will run
+ tags - [String!] + Tags of the infrastructure
+
+
+
+
+
Example
+ + +
{
+  "id": "abc123",
+  "type": "All",
+  "name": "abc123",
+  "description": "xyz789",
+  "manifest": "abc123",
+  "infraID": 4,
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ScheduleType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

CRON

+
+
+

NON_CRON

+
+
+

ALL

+
+
+
+
+
+
+
Example
+ + +
"CRON"
+
+ + +
+
+
+
+
+
+ Types +
+

ServerVersionResponse

+
+
+
+
Description
+

Response received for fetching GQL server version

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
key - String! + Returns server version key
value - String! + Returns server version value
+
+
+
+
+
Example
+ + +
{
+  "key": "xyz789",
+  "value": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Spec

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
displayName - String! + +
categoryDescription - String! + +
keywords - [String!]! + +
maturity - String! + +
maintainers - [Maintainer!]! + +
minKubeVersion - String! + +
provider - Provider! + +
links - [Link!]! + +
faults - [FaultList!]! + +
experiments - [String!] + +
chaosExpCRDLink - String! + +
platforms - [String!]! + +
chaosType - String + +
+
+
+
+
+
Example
+ + +
{
+  "displayName": "xyz789",
+  "categoryDescription": "abc123",
+  "keywords": ["xyz789"],
+  "maturity": "abc123",
+  "maintainers": [Maintainer],
+  "minKubeVersion": "abc123",
+  "provider": Provider,
+  "links": [Link],
+  "faults": [FaultList],
+  "experiments": ["abc123"],
+  "chaosExpCRDLink": "xyz789",
+  "platforms": ["xyz789"],
+  "chaosType": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Status

+
+
+
+
Description
+

Status defines whether a probe is pass or fail

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
verdict - ProbeVerdict! + Verdict defines the verdict of the probe, range: Passed, Failed, N/A
description - String + Description defines the description of probe status
+
+
+
+
+
Example
+ + +
{
+  "verdict": "Passed",
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

String

+
+
+
+
Description
+

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

+
+
+
+
+
Example
+ + +
"xyz789"
+
+ + +
+
+
+
+
+
+ Types +
+

Toleration

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ tolerationSeconds - Int + +
+ key - String + +
+ operator - String + +
+ effect - String + +
+ value - String + +
+
+
+
+
+
Example
+ + +
{
+  "tolerationSeconds": 123,
+  "key": "abc123",
+  "operator": "abc123",
+  "effect": "abc123",
+  "value": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the chaos hub
+ name - String! + Name of the chaos hub
+ description - String + Description of the infra
+ tags - [String!] + Tags of the infra
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ remoteHub - String! + Connected Hub of remote repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "id": "abc123",
+  "name": "abc123",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "repoURL": "xyz789",
+  "repoBranch": "xyz789",
+  "remoteHub": "xyz789",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String + +
+ description - String + +
+ tags - [String] + +
+ type - EnvironmentType + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "abc123",
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["xyz789"],
+  "type": "PROD"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateStatus

+
+
+
+
Description
+

UpdateStatus represents if infra needs to be updated

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

AVAILABLE

+
+
+

MANDATORY

+
+
+

NOT_REQUIRED

+
+
+
+
+
+
+
Example
+ + +
"AVAILABLE"
+
+ + +
+
+
+
+
+
+ Types +
+

UserDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
userID - String! + +
username - String! + +
email - String! + +
+
+
+
+
+
Example
+ + +
{
+  "userID": "abc123",
+  "username": "abc123",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Weightages

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Name of the fault
weightage - Int! + Weightage of the experiment
+
+
+
+
+
Example
+ + +
{"faultName": "abc123", "weightage": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

WeightagesInput

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ faultName - String! + Name of the fault
+ weightage - Int! + Weightage of the fault
+
+
+
+
+
Example
+ + +
{"faultName": "xyz789", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

Workload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + +
+ kind - String! + +
+ namespace - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "kind": "abc123",
+  "namespace": "abc123"
+}
+
+ + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.x/config.yml b/mkdocs/docs/graphql/v3.11.x/config.yml new file mode 100644 index 00000000000..8035463a23c --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.x/config.yml @@ -0,0 +1,33 @@ +spectaql: + targetDir: ./mkdocs/docs/graphql/v3.11.x + logoFile: ./mkdocs/docs/graphql/logo.png + faviconFile: ./mkdocs/docs/graphql/logo.png + displayAllServers: true + themeDir: ./mkdocs/docs/graphql/v3.11.x/custom-theme + +introspection: + removeTrailingPeriodFromDescriptions: false + schemaFile: ./chaoscenter/graphql/definitions/shared/*.graphqls + queryNameStrategy: capitalizeFirst + fieldExpansionDepth: 2 + + spectaqlDirective: + enable: true + +extensions: + graphqlScalarExamples: true + +info: + title: ChaosCenter API Documentation + description: Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform. + + x-introItems: + - title: Common Error Response + file: ./mkdocs/docs/graphql/v3.11.x/error_response_guide.md + +servers: + - url: http://localhost:8080 + description: Dev + - url: http://localhost:8080/query + description: Prod + production: true diff --git a/mkdocs/docs/graphql/v3.11.x/custom-theme/stylesheets/custom.scss b/mkdocs/docs/graphql/v3.11.x/custom-theme/stylesheets/custom.scss new file mode 100644 index 00000000000..68e1aa2268c --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.x/custom-theme/stylesheets/custom.scss @@ -0,0 +1,24 @@ + +$line-height-heading: 1.2; +$font-size-large-heading: 1.7105263158rem; +$font-weight-large-heading: 700; +$content-padding: 20px; +$text-color: #535b60; +$text-weight: 400; +$text-size: 1.5789473684rem; + +#spectaql { + h2 { + color: $text-color; + font-weight: $text-weight; + font-size: $text-size; + } + + .doc-heading { + line-height: $line-height-heading; + font-size: $font-size-large-heading; + font-weight: $font-weight-large-heading; + color: #535b60 + } + +} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.x/error_response_guide.md b/mkdocs/docs/graphql/v3.11.x/error_response_guide.md new file mode 100644 index 00000000000..76e4ab30fce --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.x/error_response_guide.md @@ -0,0 +1,29 @@ +All error responses follow the structure outlined below. + +```json +{ + "errors": [ + { + "message": "Error message", + "path": [ + "Request path" + ] + } + ], + "data": {} +} +``` + +### Field Descriptions: +- **errors**:
+ An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
+ **Type: `Array`**

+ - **message**:
+ A description of the error.
+ **Type: `String`**

+ - **path**:
+ Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
+ **Type: `Array of Strings`**

+- **data**:
+ This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
+ **Type: `Object`**
diff --git a/mkdocs/docs/graphql/v3.11.x/images/favicon.png b/mkdocs/docs/graphql/v3.11.x/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.11.x/images/logo.png b/mkdocs/docs/graphql/v3.11.x/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.11.x/javascripts/spectaql.min.js b/mkdocs/docs/graphql/v3.11.x/javascripts/spectaql.min.js new file mode 100644 index 00000000000..6ef3202c222 --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.x/javascripts/spectaql.min.js @@ -0,0 +1 @@ +function scrollSpy(){var l=5,e=document.querySelector("html"),c=(e&&(e=window.getComputedStyle(e).scrollPaddingTop)&&"string"==typeof e&&"auto"!==e&&e.endsWith("px")&&(l+=parseInt(e.split("px")[0])),"nav-scroll-active"),i=null,d=[];function t(){i=null;var e=document.querySelectorAll("[data-traverse-target]");Array.prototype.forEach.call(e,function(e){d.push({id:e.id,top:e.offsetTop})})}var n=debounce(function(){t(),o()},500),o=debounce(function(){var e,t,n,o,r=(e=>{for(var t=e+l,n=0;n=d[n].top&&(!o||t{toggleMenu(),scrollSpy()}); \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.11.x/stylesheets/spectaql.min.css b/mkdocs/docs/graphql/v3.11.x/stylesheets/spectaql.min.css new file mode 100644 index 00000000000..e7666ab6b36 --- /dev/null +++ b/mkdocs/docs/graphql/v3.11.x/stylesheets/spectaql.min.css @@ -0,0 +1 @@ +#spectaql h2{color:#535b60;font-weight:400;font-size:1.5789473684rem}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;font-weight:700;color:#535b60}#spectaql{padding:0;margin:0}#spectaql pre{overflow:auto;margin-top:0;margin-bottom:20px}#spectaql pre code{display:block;background:#ccc}#spectaql table{width:100%;table-layout:fixed;text-align:left;border-collapse:collapse}#spectaql table td,#spectaql table th{margin:0;padding:0}#spectaql #introduction .example-section>*,#spectaql .definition-heading,#spectaql .doc-heading,#spectaql .introduction-item-title,#spectaql .operation-heading{overflow:hidden;text-overflow:ellipsis}#spectaql #page{display:flex}#spectaql #page *{box-sizing:border-box}#spectaql #page.drawer-open #sidebar{z-index:1000;transform:translateX(0)}#spectaql #page.drawer-open .drawer-overlay{display:block;background:rgba(0,0,0,.5);z-index:10}#spectaql #sidebar{position:fixed;min-width:250px;max-width:250px;flex-shrink:0;transition:transform .2s ease-out;transform:translateX(-100%);z-index:10;padding-top:20px;background:#fff}@media (min-width:48em){#spectaql #sidebar{position:relative;transform:none}}@media (min-width:64em){#spectaql #sidebar{min-width:300px;max-width:300px}}#spectaql .sidebar-top-container{display:flex;align-items:center;padding:0 20px}#spectaql #mobile-navbar{display:flex;align-items:center;position:sticky;top:0}@media (min-width:48em){#spectaql #mobile-navbar{display:none}}#spectaql .sidebar-open-button{display:flex;align-items:flex-start;margin:0;padding:0;border:none;background:0 0}#spectaql .sidebar-open-button .hamburger{width:16px;height:14px;cursor:pointer}#spectaql .sidebar-open-button .hamburger::after{display:block;content:"";height:2px;background:#535b60;box-shadow:0 5px 0 #535b60,0 10px 0 #535b60}#spectaql .sidebar-open-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .close-button{display:block}#spectaql .close-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width:48em){#spectaql .close-button{display:none}}#spectaql .drawer-overlay{display:none;position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0)}@media (min-width:48em){#spectaql .drawer-overlay{display:none!important}}#spectaql #nav{display:flex;flex-direction:column;max-height:calc(100vh - 0px);padding:0 20px;padding-bottom:20px;position:sticky;top:0;overflow:auto}#spectaql #logo{margin-right:auto}#spectaql #logo img{display:block;width:100%;max-width:100%}#spectaql .nav-group-items,#spectaql .nav-group-section-items{padding:0;margin:0}#spectaql .nav-group-items>li,#spectaql .nav-group-section-items>li{list-style:none}#spectaql .nav-group-items .nav-group-section-title,#spectaql .nav-group-items>li,#spectaql .nav-group-section-items .nav-group-section-title,#spectaql .nav-group-section-items>li{overflow:hidden;text-overflow:ellipsis}#spectaql .nav-group-section-items{display:none}#spectaql .nav-scroll-expand .nav-group-section-items{display:block}#spectaql #docs{position:relative;margin:0 auto;min-width:100px;max-width:88em;flex-grow:1;flex-shrink:1;padding:20px}@media (min-width:48em){#spectaql .doc-row{display:flex;flex-wrap:wrap}}#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:100%}@media (min-width:48em){#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:50%}}@media (min-width:48em){#spectaql .doc-row .doc-copy{padding-right:20px}}@media (min-width:48em){#spectaql .doc-row .doc-examples{padding-left:20px}}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e}#spectaql{font-family:-apple-system,BlinkMacSystemFont,system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.6;background:#fff;color:#535b60}@media (min-width:32em){#spectaql{font-size:16px}}#spectaql a{color:#0298bf;text-decoration:none}#spectaql a:hover{color:#0182a2}#spectaql a:active,#spectaql a:focus{color:#0298bf}#spectaql code{font-size:.875em;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}#spectaql pre{color:#fff}#spectaql pre code{background:#222}#spectaql pre code,#spectaql pre code.hljs{font-size:.82em;line-height:1.4;padding:15px 20px}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;margin-top:10px}@media (min-width:48em){#spectaql .doc-heading{margin-top:-10px}}#spectaql .close-button{background:0 0;border:none;padding:5px;font-size:16px;font-weight:700;color:#535b60}#spectaql #introduction{margin-bottom:60px}#spectaql #introduction .example-section:not(.example-section-is-code){margin-bottom:20px}#spectaql #introduction .example-section:not(.example-section-is-code) h5,#spectaql #introduction .example-section:not(.example-section-is-code) p{margin:0;font-size:1em}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:20px;padding-bottom:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:30px;padding-bottom:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:40px;padding-bottom:40px}}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:20px;padding-right:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:30px;padding-right:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:50px;padding-right:50px}}#spectaql #sidebar{padding-bottom:0;background:#fff}#spectaql #sidebar a{color:#535b60}#spectaql #sidebar a.nav-scroll-active,#spectaql #sidebar a:hover{font-weight:700}#spectaql #sidebar a.nav-scroll-active{color:#535b60}#spectaql #sidebar a:hover{color:#0182a2}@media (min-width:48em){#spectaql #sidebar{border-right:2px solid #d8d8d8}}#spectaql #mobile-navbar{background:#fff;margin-top:-20px;margin-left:-20px;margin-right:-20px}@media (min-width:32em){#spectaql #mobile-navbar{margin-top:-30px;margin-left:-30px;margin-right:-30px}}#spectaql #mobile-navbar .sidebar-open-button::after{display:block;content:"All Topics";margin-left:10px;color:#535b60}#spectaql #nav .nav-group{margin-top:20px}#spectaql #nav .nav-group li{margin-bottom:5px}#spectaql #nav .nav-group-title{font-size:.875em;font-weight:400;margin:0 0 6px 0;color:#999}#spectaql #nav .nav-group-section-title{font-size:inherit;margin:0;margin-bottom:5px;font-weight:400}#spectaql #nav .nav-group-section-items{margin-left:.75em}#spectaql .definition,#spectaql .operation{margin-bottom:60px}#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.72em}#spectaql .definition .definition-heading code,#spectaql .definition .operation-heading code,#spectaql .operation .definition-heading code,#spectaql .operation .operation-heading code{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:32em){#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.7105263158rem}}#spectaql .definition-group-name,#spectaql .group-heading,#spectaql .operation-group-name{border-top:2px solid #d8d8d8;padding-top:3px;color:#999;font-size:inherit;font-weight:inherit}#spectaql .definition-group-name a,#spectaql .group-heading a,#spectaql .operation-group-name a{color:#999}#spectaql .definition-group-name a:hover,#spectaql .group-heading a:hover,#spectaql .operation-group-name a:hover{font-weight:700}#spectaql .doc-examples{margin-top:20px}#spectaql .doc-examples .example-heading{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .doc-examples .example-section-is-code h5{color:#999;text-transform:uppercase;background:#000;font-size:.75em;font-weight:700;padding:.6em 0 .6em 20px;margin:0;opacity:1}@media (min-width:48em){#spectaql .doc-examples{margin-top:0}}#spectaql .doc-copy p{margin:0 0 20px 0}#spectaql .doc-copy p:last-child{margin-bottom:0}#spectaql .doc-copy table tr th{font-weight:400;border-bottom:2px solid #d8d8d8}#spectaql .doc-copy table tr td{border-bottom:1px solid #e0e0e0}#spectaql .doc-copy table tr.row-has-field-arguments td,#spectaql .doc-copy table tr:last-child td{border-bottom:none}#spectaql .doc-copy table tr td,#spectaql .doc-copy table tr th{padding:5px}#spectaql .doc-copy table tr td:first-child,#spectaql .doc-copy table tr th:first-child{padding-left:0}#spectaql .doc-copy table tr td:last-child,#spectaql .doc-copy table tr th:last-child{padding-right:0}#spectaql .doc-copy .doc-copy-section{margin-bottom:30px}#spectaql .doc-copy .doc-copy-section>h5{margin:0 0 5px 0;font-size:inherit;font-weight:inherit;color:#999}#spectaql .doc-copy .definition-description>h5,#spectaql .doc-copy .definition-properties>h5,#spectaql .doc-copy .operation-description>h5{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .field-arguments{font-size:.875em;background-color:#fafbfc;border:1px solid #e0e0e0;padding:10px;margin-bottom:5px}#spectaql .field-arguments p{margin:10px 0 0 0}#spectaql .field-arguments h5.field-arguments-heading{margin:0;padding:0 0 10px 0;font-weight:inherit;color:#999}#spectaql .field-arguments .field-argument{border-top:1px #e0e0e0 solid;padding:10px 0}#spectaql .field-arguments .field-argument:last-child{padding-bottom:0}#spectaql .field-arguments .field-argument-name{margin:0;font-size:inherit;font-weight:inherit}#spectaql .deprecation-reason{word-break:break-word}#spectaql .deprecation-reason::before{display:inline;content:"Deprecated";padding:2px 5px;margin-right:5px;background:#fed7d8;color:#c60609;font-weight:700;font-size:.875em} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.9.0/api.html b/mkdocs/docs/graphql/v3.9.0/api.html new file mode 100644 index 00000000000..78c473a55e6 --- /dev/null +++ b/mkdocs/docs/graphql/v3.9.0/api.html @@ -0,0 +1,17877 @@ + + + + + + + ChaosCenter API Documentation + + + + +
+ +
+
+ +
+
+

ChaosCenter API Documentation

+
+
+
+

Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform.

+
+
+
+
API Endpoints
+
# Dev:
+http://localhost:8080
+# Prod:
+http://localhost:8080/query
+
+
+
+
+
+

Common Error Response

+
+
+

All error responses follow the structure outlined below.

+
{
+  "errors": [
+    {
+      "message": "Error message",
+      "path": [
+        "Request path"
+      ]
+    }
+  ],
+  "data": {}
+}
+
+

Field Descriptions:

+
    +
  • errors:
    An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
    + Type: Array

    +
      +
    • message:
      A description of the error.
      + Type: String

      +
    • +
    • path:
      Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
      + Type: Array of Strings

      +
    • +
    +
  • +
  • data:
    This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
    + Type: Object
    +
  • +
+
+
+
+
+
+
+

Queries

+
+

+ getChaosFault +

+
+
+
+
Description
+

Get the fault list from a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a FaultDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosFault(
+  $projectID: ID!,
+  $request: ExperimentRequest!
+) {
+  getChaosFault(
+    projectID: $projectID,
+    request: $request
+  ) {
+    fault
+    engine
+    csv
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ExperimentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosFault": {
+      "fault": "abc123",
+      "engine": "xyz789",
+      "csv": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHub +

+
+
+
+
Description
+

Get the details of a requested ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHubStatus! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ chaosHubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHub(
+  $projectID: ID!,
+  $chaosHubID: ID!
+) {
+  getChaosHub(
+    projectID: $projectID,
+    chaosHubID: $chaosHubID
+  ) {
+    id
+    repoURL
+    repoBranch
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "chaosHubID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getChaosHub": {
+      "id": "4",
+      "repoURL": "xyz789",
+      "repoBranch": "xyz789",
+      "isAvailable": true,
+      "totalFaults": "xyz789",
+      "totalExperiments": "abc123",
+      "name": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "xyz789",
+      "password": "abc123",
+      "isRemoved": false,
+      "sshPrivateKey": "xyz789",
+      "sshPublicKey": "abc123",
+      "lastSyncedAt": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "description": "xyz789",
+      "isDefault": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getChaosHubStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetChaosHubStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetChaosHubStats($projectID: ID!) {
+  getChaosHubStats(projectID: $projectID) {
+    totalChaosHubs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{"data": {"getChaosHubStats": {"totalChaosHubs": 987}}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  getEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "environmentID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getEnvironment": {
+      "projectID": "abc123",
+      "environmentID": "abc123",
+      "name": "abc123",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "type": "PROD",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "abc123",
+      "isRemoved": false,
+      "infraIDs": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperiment +

+
+
+
+
Description
+

Returns the experiment based on experiment ID

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperiment(
+  $projectID: ID!,
+  $experimentID: String!
+) {
+  getExperiment(
+    projectID: $projectID,
+    experimentID: $experimentID
+  ) {
+    experimentDetails {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+    averageResiliencyScore
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperiment": {
+      "experimentDetails": Experiment,
+      "averageResiliencyScore": 987.65
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRun +

+
+
+
+
Description
+

Returns experiment run based on experiment run ID

+
+
+
+
+
+
+
Response
+

Returns an ExperimentRun! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - ID + +
+ notifyID - ID + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: ID,
+  $notifyID: ID
+) {
+  getExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  ) {
+    projectID
+    experimentRunID
+    experimentType
+    experimentID
+    weightages {
+      faultName
+      weightage
+    }
+    updatedAt
+    createdAt
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+    experimentName
+    experimentManifest
+    phase
+    resiliencyScore
+    faultsPassed
+    faultsFailed
+    faultsAwaited
+    faultsStopped
+    faultsNa
+    totalFaults
+    executionData
+    isRemoved
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+    notifyID
+    runSequence
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "experimentRunID": 4, "notifyID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRun": {
+      "projectID": "4",
+      "experimentRunID": 4,
+      "experimentType": "abc123",
+      "experimentID": "4",
+      "weightages": [Weightages],
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "infra": Infra,
+      "experimentName": "xyz789",
+      "experimentManifest": "xyz789",
+      "phase": "All",
+      "resiliencyScore": 987.65,
+      "faultsPassed": 123,
+      "faultsFailed": 123,
+      "faultsAwaited": 987,
+      "faultsStopped": 123,
+      "faultsNa": 987,
+      "totalFaults": 123,
+      "executionData": "abc123",
+      "isRemoved": false,
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails,
+      "notifyID": "4",
+      "runSequence": 987
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentRunStats +

+
+
+
+
Description
+

Query to get experiment run stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentRunStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentRunStats($projectID: ID!) {
+  getExperimentRunStats(projectID: $projectID) {
+    totalExperimentRuns
+    totalCompletedExperimentRuns
+    totalTerminatedExperimentRuns
+    totalRunningExperimentRuns
+    totalStoppedExperimentRuns
+    totalErroredExperimentRuns
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentRunStats": {
+      "totalExperimentRuns": 987,
+      "totalCompletedExperimentRuns": 987,
+      "totalTerminatedExperimentRuns": 123,
+      "totalRunningExperimentRuns": 987,
+      "totalStoppedExperimentRuns": 987,
+      "totalErroredExperimentRuns": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getExperimentStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetExperimentStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetExperimentStats($projectID: ID!) {
+  getExperimentStats(projectID: $projectID) {
+    totalExperiments
+    totalExpCategorizedByResiliencyScore {
+      id
+      count
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getExperimentStats": {
+      "totalExperiments": 987,
+      "totalExpCategorizedByResiliencyScore": [
+        ResilienceScoreCategory
+      ]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getGitOpsDetails +

+
+
+
+
Description
+

Returns the git configuration for gitops

+
+
+
+
+
+
+
Response
+

Returns a GitConfigResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetGitOpsDetails($projectID: ID!) {
+  getGitOpsDetails(projectID: $projectID) {
+    enabled
+    projectID
+    branch
+    repoURL
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getGitOpsDetails": {
+      "enabled": false,
+      "projectID": "xyz789",
+      "branch": "abc123",
+      "repoURL": "xyz789",
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getImageRegistry +

+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetImageRegistry($projectID: String!) {
+  getImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "abc123",
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfra +

+
+
+
+
Description
+

Returns infra with a particular infraID in the project

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  getInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "infraID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfra": {
+      "projectID": "4",
+      "infraID": 4,
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["abc123"],
+      "environmentID": "abc123",
+      "platformName": "abc123",
+      "isActive": false,
+      "isInfraConfirmed": true,
+      "isRemoved": false,
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 987,
+      "token": "xyz789",
+      "infraNamespace": "xyz789",
+      "serviceAccount": "abc123",
+      "infraScope": "abc123",
+      "infraNsExists": false,
+      "infraSaExists": true,
+      "lastExperimentTimestamp": "abc123",
+      "startTime": "abc123",
+      "version": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraDetails +

+
+
+
+
Description
+

Returns infra details based on identifiers

+
+
+
+
+
+
+
Response
+

Returns an Infra! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraDetails(
+  $infraID: ID!,
+  $projectID: ID!
+) {
+  getInfraDetails(
+    infraID: $infraID,
+    projectID: $projectID
+  ) {
+    projectID
+    infraID
+    name
+    description
+    tags
+    environmentID
+    platformName
+    isActive
+    isInfraConfirmed
+    isRemoved
+    updatedAt
+    createdAt
+    noOfExperiments
+    noOfExperimentRuns
+    token
+    infraNamespace
+    serviceAccount
+    infraScope
+    infraNsExists
+    infraSaExists
+    lastExperimentTimestamp
+    startTime
+    version
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    infraType
+    updateStatus
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"infraID": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraDetails": {
+      "projectID": 4,
+      "infraID": "4",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["xyz789"],
+      "environmentID": "abc123",
+      "platformName": "xyz789",
+      "isActive": false,
+      "isInfraConfirmed": false,
+      "isRemoved": false,
+      "updatedAt": "xyz789",
+      "createdAt": "abc123",
+      "noOfExperiments": 123,
+      "noOfExperimentRuns": 123,
+      "token": "xyz789",
+      "infraNamespace": "xyz789",
+      "serviceAccount": "abc123",
+      "infraScope": "abc123",
+      "infraNsExists": true,
+      "infraSaExists": false,
+      "lastExperimentTimestamp": "xyz789",
+      "startTime": "abc123",
+      "version": "abc123",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "infraType": "Kubernetes",
+      "updateStatus": "AVAILABLE"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraManifest +

+
+
+
+
Description
+

Returns the manifest for a given infraID

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ infraID - ID! + +
+ upgrade - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraManifest(
+  $infraID: ID!,
+  $upgrade: Boolean!,
+  $projectID: ID!
+) {
+  getInfraManifest(
+    infraID: $infraID,
+    upgrade: $upgrade,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"infraID": 4, "upgrade": false, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"getInfraManifest": "abc123"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getInfraStats +

+
+
+
+
Description
+

Query to get experiment stats

+
+
+
+
+
+
+
Response
+

Returns a GetInfraStatsResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetInfraStats($projectID: ID!) {
+  getInfraStats(projectID: $projectID) {
+    totalInfrastructures
+    totalActiveInfrastructure
+    totalInactiveInfrastructures
+    totalConfirmedInfrastructure
+    totalNonConfirmedInfrastructures
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraStats": {
+      "totalInfrastructures": 123,
+      "totalActiveInfrastructure": 987,
+      "totalInactiveInfrastructures": 987,
+      "totalConfirmedInfrastructure": 123,
+      "totalNonConfirmedInfrastructures": 123
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getPredefinedExperiment +

+
+
+
+
Description
+

Returns predefined experiment details of selected experiments

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ experimentName - [String!]! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetPredefinedExperiment(
+  $hubID: ID!,
+  $experimentName: [String!]!,
+  $projectID: ID!
+) {
+  getPredefinedExperiment(
+    hubID: $hubID,
+    experimentName: $experimentName,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "hubID": 4,
+  "experimentName": ["abc123"],
+  "projectID": 4
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPredefinedExperiment": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "xyz789",
+        "experimentManifest": "abc123"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbe +

+
+
+
+
Description
+

Returns a single Probe based on ProbeName and various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbe": {
+      "projectID": "4",
+      "name": "abc123",
+      "description": "abc123",
+      "tags": ["abc123"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 987,
+      "updatedAt": "abc123",
+      "createdAt": "abc123",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeReference +

+
+
+
+
Description
+

Returns all the reference of the Probe based on ProbeName

+
+
+
+
+
+
+
Response
+

Returns a GetProbeReferenceResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeReference(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  getProbeReference(
+    projectID: $projectID,
+    probeName: $probeName
+  ) {
+    projectID
+    name
+    totalRuns
+    recentExecutions {
+      faultName
+      mode
+      executionHistory {
+        ...ExecutionHistoryFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "probeName": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbeReference": {
+      "projectID": 4,
+      "name": "xyz789",
+      "totalRuns": 123,
+      "recentExecutions": [RecentExecutions]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbeYAML +

+
+
+
+
Description
+

Returns the Probe YAML based on ProbeName which can be used in ChaosEngine manifest

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - GetProbeYAMLRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbeYAML(
+  $projectID: ID!,
+  $request: GetProbeYAMLRequest!
+) {
+  getProbeYAML(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": GetProbeYAMLRequest
+}
+
+ + +
+
+
Response
+ + +
{"data": {"getProbeYAML": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getProbesInExperimentRun +

+
+
+
+
Description
+

Returns all the Probes attached to the requested Experiment Run

+
+
+
+
+
+
+
Response
+

Returns [GetProbesInExperimentRunResponse]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentRunID - String! + +
+ faultName - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetProbesInExperimentRun(
+  $projectID: ID!,
+  $experimentRunID: String!,
+  $faultName: String!
+) {
+  getProbesInExperimentRun(
+    projectID: $projectID,
+    experimentRunID: $experimentRunID,
+    faultName: $faultName
+  ) {
+    probe {
+      projectID
+      name
+      description
+      tags
+      type
+      infrastructureType
+      kubernetesHTTPProperties {
+        ...KubernetesHTTPProbeFragment
+      }
+      kubernetesCMDProperties {
+        ...KubernetesCMDProbeFragment
+      }
+      k8sProperties {
+        ...K8SProbeFragment
+      }
+      promProperties {
+        ...PROMProbeFragment
+      }
+      recentExecutions {
+        ...ProbeRecentExecutionsFragment
+      }
+      referencedBy
+      updatedAt
+      createdAt
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+    }
+    mode
+    status {
+      verdict
+      description
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": 4,
+  "experimentRunID": "abc123",
+  "faultName": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getProbesInExperimentRun": [
+      {
+        "probe": Probe,
+        "mode": "SOT",
+        "status": Status
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getServerVersion +

+
+
+
+
Description
+

Returns version of gql server

+
+
+
+
+
+
+
Response
+

Returns a ServerVersionResponse! +

+
+
+
+

Example

+
+
Query
+ + +
query GetServerVersion {
+  getServerVersion {
+    key
+    value
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getServerVersion": {
+      "key": "xyz789",
+      "value": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ getVersionDetails +

+
+
+
+
Description
+

Query to get the latest version of infra available

+
+
+
+
+
+
+
Response
+

Returns an InfraVersionDetails! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query GetVersionDetails($projectID: ID!) {
+  getVersionDetails(projectID: $projectID) {
+    latestVersion
+    compatibleVersions
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getVersionDetails": {
+      "latestVersion": "xyz789",
+      "compatibleVersions": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosFaults +

+
+
+
+
Description
+

List the Charts details of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [Chart!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosFaults(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listChaosFaults(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    apiVersion
+    kind
+    metadata {
+      name
+      version
+      annotations {
+        ...AnnotationFragment
+      }
+    }
+    spec {
+      displayName
+      categoryDescription
+      keywords
+      maturity
+      maintainers {
+        ...MaintainerFragment
+      }
+      minKubeVersion
+      provider {
+        ...ProviderFragment
+      }
+      links {
+        ...LinkFragment
+      }
+      faults {
+        ...FaultListFragment
+      }
+      experiments
+      chaosExpCRDLink
+      platforms
+      chaosType
+    }
+    packageInfo {
+      packageName
+      experiments {
+        ...ExperimentsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": "4", "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosFaults": [
+      {
+        "apiVersion": "abc123",
+        "kind": "abc123",
+        "metadata": Metadata,
+        "spec": Spec,
+        "packageInfo": PackageInformation
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listChaosHub +

+
+
+
+
Description
+

Lists all the connected ChaosHub

+
+
+
+
+
+
+
Response
+

Returns [ChaosHubStatus]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListChaosHubRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListChaosHub(
+  $projectID: ID!,
+  $request: ListChaosHubRequest
+) {
+  listChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    isAvailable
+    totalFaults
+    totalExperiments
+    name
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    isRemoved
+    sshPrivateKey
+    sshPublicKey
+    lastSyncedAt
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdAt
+    updatedAt
+    description
+    isDefault
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listChaosHub": [
+      {
+        "id": "4",
+        "repoURL": "xyz789",
+        "repoBranch": "xyz789",
+        "isAvailable": true,
+        "totalFaults": "abc123",
+        "totalExperiments": "xyz789",
+        "name": "xyz789",
+        "hubType": "GIT",
+        "isPrivate": false,
+        "authType": "BASIC",
+        "token": "abc123",
+        "userName": "xyz789",
+        "password": "xyz789",
+        "isRemoved": false,
+        "sshPrivateKey": "abc123",
+        "sshPublicKey": "abc123",
+        "lastSyncedAt": "abc123",
+        "tags": ["abc123"],
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "createdAt": "xyz789",
+        "updatedAt": "xyz789",
+        "description": "xyz789",
+        "isDefault": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listEnvironments +

+
+
+
+
Response
+

Returns a ListEnvironmentResponse +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListEnvironments(
+  $projectID: ID!,
+  $request: ListEnvironmentRequest
+) {
+  listEnvironments(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfEnvironments
+    environments {
+      projectID
+      environmentID
+      name
+      description
+      tags
+      type
+      createdAt
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      updatedAt
+      isRemoved
+      infraIDs
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": ListEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listEnvironments": {
+      "totalNoOfEnvironments": 987,
+      "environments": [Environment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperiment +

+
+
+
+
Description
+

Returns the list of experiments based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperiment(
+  $projectID: ID!,
+  $request: ListExperimentRequest!
+) {
+  listExperiment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperiments
+    experiments {
+      projectID
+      experimentID
+      experimentType
+      experimentManifest
+      cronSyntax
+      name
+      description
+      weightages {
+        ...WeightagesFragment
+      }
+      isCustomExperiment
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      isRemoved
+      tags
+      createdBy {
+        ...UserDetailsFragment
+      }
+      recentExperimentRunDetails {
+        ...RecentExperimentRunFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListExperimentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperiment": {
+      "totalNoOfExperiments": 987,
+      "experiments": [Experiment]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listExperimentRun +

+
+
+
+
Description
+

Returns the list of experiment run based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns a ListExperimentRunResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListExperimentRun(
+  $projectID: ID!,
+  $request: ListExperimentRunRequest!
+) {
+  listExperimentRun(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfExperimentRuns
+    experimentRuns {
+      projectID
+      experimentRunID
+      experimentType
+      experimentID
+      weightages {
+        ...WeightagesFragment
+      }
+      updatedAt
+      createdAt
+      infra {
+        ...InfraFragment
+      }
+      experimentName
+      experimentManifest
+      phase
+      resiliencyScore
+      faultsPassed
+      faultsFailed
+      faultsAwaited
+      faultsStopped
+      faultsNa
+      totalFaults
+      executionData
+      isRemoved
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      createdBy {
+        ...UserDetailsFragment
+      }
+      notifyID
+      runSequence
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listExperimentRun": {
+      "totalNoOfExperimentRuns": 123,
+      "experimentRuns": [ExperimentRun]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listImageRegistry +

+
+
+
+
Response
+

Returns [ImageRegistryResponse!] +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListImageRegistry($projectID: String!) {
+  listImageRegistry(projectID: $projectID) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listImageRegistry": [
+      {
+        "isDefault": true,
+        "imageRegistryInfo": ImageRegistry,
+        "imageRegistryID": "abc123",
+        "projectID": "xyz789",
+        "updatedAt": "xyz789",
+        "createdAt": "xyz789",
+        "createdBy": UserDetails,
+        "updatedBy": UserDetails,
+        "isRemoved": false
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listInfras +

+
+
+
+
Description
+

Returns infras with a particular infra type in the project

+
+
+
+
+
+
+
Response
+

Returns a ListInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - ListInfraRequest + +
+
+
+
+

Example

+
+
Query
+ + +
query ListInfras(
+  $projectID: ID!,
+  $request: ListInfraRequest
+) {
+  listInfras(
+    projectID: $projectID,
+    request: $request
+  ) {
+    totalNoOfInfras
+    infras {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": ListInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listInfras": {
+      "totalNoOfInfras": 123,
+      "infras": [Infra]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listPredefinedExperiments +

+
+
+
+
Description
+

List the PredefinedExperiments present in the hub

+
+
+
+
+
+
+
Response
+

Returns [PredefinedExperimentList!]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ hubID - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ListPredefinedExperiments(
+  $hubID: ID!,
+  $projectID: ID!
+) {
+  listPredefinedExperiments(
+    hubID: $hubID,
+    projectID: $projectID
+  ) {
+    experimentName
+    experimentCSV
+    experimentManifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"hubID": 4, "projectID": "4"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listPredefinedExperiments": [
+      {
+        "experimentName": "abc123",
+        "experimentCSV": "xyz789",
+        "experimentManifest": "xyz789"
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ listProbes +

+
+
+
+
Description
+

Returns the list of Probes based on various filter parameters

+
+
+
+
+
+
+
Response
+

Returns [Probe]! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infrastructureType - InfrastructureType + +
+ probeNames - [ID!] + +
+ filter - ProbeFilterInput + +
+
+
+
+

Example

+
+
Query
+ + +
query ListProbes(
+  $projectID: ID!,
+  $infrastructureType: InfrastructureType,
+  $probeNames: [ID!],
+  $filter: ProbeFilterInput
+) {
+  listProbes(
+    projectID: $projectID,
+    infrastructureType: $infrastructureType,
+    probeNames: $probeNames,
+    filter: $filter
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infrastructureType": "Kubernetes",
+  "probeNames": [4],
+  "filter": ProbeFilterInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "listProbes": [
+      {
+        "projectID": "4",
+        "name": "abc123",
+        "description": "abc123",
+        "tags": ["xyz789"],
+        "type": "httpProbe",
+        "infrastructureType": "Kubernetes",
+        "kubernetesHTTPProperties": KubernetesHTTPProbe,
+        "kubernetesCMDProperties": KubernetesCMDProbe,
+        "k8sProperties": K8SProbe,
+        "promProperties": PROMProbe,
+        "recentExecutions": [ProbeRecentExecutions],
+        "referencedBy": 987,
+        "updatedAt": "xyz789",
+        "createdAt": "xyz789",
+        "updatedBy": UserDetails,
+        "createdBy": UserDetails
+      }
+    ]
+  }
+}
+
+ + +
+
+
+
+
+
+ Queries +
+

+ validateUniqueProbe +

+
+
+
+
Description
+

Validates if a probe is already present, returns true if unique

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ probeName - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
query ValidateUniqueProbe(
+  $projectID: ID!,
+  $probeName: ID!
+) {
+  validateUniqueProbe(
+    projectID: $projectID,
+    probeName: $probeName
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "probeName": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"validateUniqueProbe": true}}
+
+ + +
+
+
+
+

Mutations

+
+

+ addChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (includes the git clone operation)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  addChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": CreateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addChaosHub": {
+      "id": 4,
+      "repoURL": "abc123",
+      "repoBranch": "abc123",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "xyz789",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "xyz789",
+      "password": "abc123",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addProbe +

+
+
+
+
Description
+

Creates a new Probe

+
+
+
+
+
+
+
Response
+

Returns a Probe! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  addProbe(
+    request: $request,
+    projectID: $projectID
+  ) {
+    projectID
+    name
+    description
+    tags
+    type
+    infrastructureType
+    kubernetesHTTPProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      url
+      method {
+        ...MethodFragment
+      }
+      insecureSkipVerify
+    }
+    kubernetesCMDProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      command
+      comparator {
+        ...ComparatorFragment
+      }
+      source
+    }
+    k8sProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      group
+      version
+      resource
+      namespace
+      resourceNames
+      fieldSelector
+      labelSelector
+      operation
+    }
+    promProperties {
+      probeTimeout
+      interval
+      retry
+      attempt
+      probePollingInterval
+      initialDelay
+      evaluationTimeout
+      stopOnFailure
+      endpoint
+      query
+      queryPath
+      comparator {
+        ...ComparatorFragment
+      }
+    }
+    recentExecutions {
+      faultName
+      status {
+        ...StatusFragment
+      }
+      executedByExperiment {
+        ...ExecutedByExperimentFragment
+      }
+    }
+    referencedBy
+    updatedAt
+    createdAt
+    updatedBy {
+      userID
+      username
+      email
+    }
+    createdBy {
+      userID
+      username
+      email
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ProbeRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addProbe": {
+      "projectID": "4",
+      "name": "xyz789",
+      "description": "abc123",
+      "tags": ["xyz789"],
+      "type": "httpProbe",
+      "infrastructureType": "Kubernetes",
+      "kubernetesHTTPProperties": KubernetesHTTPProbe,
+      "kubernetesCMDProperties": KubernetesCMDProbe,
+      "k8sProperties": K8SProbe,
+      "promProperties": PROMProbe,
+      "recentExecutions": [ProbeRecentExecutions],
+      "referencedBy": 123,
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "updatedBy": UserDetails,
+      "createdBy": UserDetails
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ addRemoteChaosHub +

+
+
+
+
Description
+

Add a ChaosHub (remote hub download)

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateRemoteChaosHub! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation AddRemoteChaosHub(
+  $projectID: ID!,
+  $request: CreateRemoteChaosHub!
+) {
+  addRemoteChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateRemoteChaosHub}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "addRemoteChaosHub": {
+      "id": "4",
+      "repoURL": "abc123",
+      "repoBranch": "abc123",
+      "projectID": 4,
+      "isDefault": true,
+      "name": "xyz789",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": true,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ chaosExperimentRun +

+
+
+
+
Description
+

Creates a new experiment run and sends it to subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - ExperimentRunRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ChaosExperimentRun($request: ExperimentRunRequest!) {
+  chaosExperimentRun(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": ExperimentRunRequest}
+
+ + +
+
+
Response
+ + +
{"data": {"chaosExperimentRun": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ confirmInfraRegistration +

+
+
+
+
Description
+

Confirms the subscriber's registration with the control plane

+
+
+
+
+
+
+
Response
+

Returns a ConfirmInfraRegistrationResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation ConfirmInfraRegistration($request: InfraIdentity!) {
+  confirmInfraRegistration(request: $request) {
+    isInfraConfirmed
+    newAccessKey
+    infraID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "confirmInfraRegistration": {
+      "isInfraConfirmed": false,
+      "newAccessKey": "xyz789",
+      "infraID": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createChaosExperiment +

+
+
+
+
Description
+

Creates a new experiment and applies its manifest

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  createChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": ChaosExperimentRequest, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": "4",
+      "cronSyntax": "abc123",
+      "experimentName": "xyz789",
+      "experimentDescription": "xyz789",
+      "isCustomExperiment": false,
+      "tags": ["xyz789"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createEnvironment +

+
+
+
+
Response
+

Returns an Environment +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateEnvironment(
+  $projectID: ID!,
+  $request: CreateEnvironmentRequest
+) {
+  createEnvironment(
+    projectID: $projectID,
+    request: $request
+  ) {
+    projectID
+    environmentID
+    name
+    description
+    tags
+    type
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    updatedAt
+    isRemoved
+    infraIDs
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateEnvironmentRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createEnvironment": {
+      "projectID": "abc123",
+      "environmentID": "abc123",
+      "name": "xyz789",
+      "description": "xyz789",
+      "tags": ["abc123"],
+      "type": "PROD",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "updatedAt": "abc123",
+      "isRemoved": true,
+      "infraIDs": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ createImageRegistry +

+
+
+
+
Description
+

Create an Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation CreateImageRegistry(
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  createImageRegistry(
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "createImageRegistry": {
+      "isDefault": true,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "xyz789",
+      "updatedAt": "xyz789",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": true
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosExperiment +

+
+
+
+
Description
+

Removes a experiment from infra

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ experimentRunID - String + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosExperiment(
+  $experimentID: String!,
+  $experimentRunID: String,
+  $projectID: ID!
+) {
+  deleteChaosExperiment(
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "xyz789",
+  "experimentRunID": "xyz789",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosExperiment": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteChaosHub +

+
+
+
+
Description
+

Delete the ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ hubID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteChaosHub(
+  $projectID: ID!,
+  $hubID: ID!
+) {
+  deleteChaosHub(
+    projectID: $projectID,
+    hubID: $hubID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "hubID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteChaosHub": false}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ environmentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteEnvironment(
+  $projectID: ID!,
+  $environmentID: ID!
+) {
+  deleteEnvironment(
+    projectID: $projectID,
+    environmentID: $environmentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "4", "environmentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteEnvironment": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteImageRegistry +

+
+
+
+
Description
+

Delete the Image Registry

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!
+) {
+  deleteImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "abc123",
+  "projectID": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteImageRegistry": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteInfra +

+
+
+
+
Description
+

Disconnects an infra and deletes its configuration from the control plane

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteInfra(
+  $projectID: ID!,
+  $infraID: String!
+) {
+  deleteInfra(
+    projectID: $projectID,
+    infraID: $infraID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteInfra": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ deleteProbe +

+
+
+
+
Description
+

Delete a Probe

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ probeName - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DeleteProbe(
+  $probeName: ID!,
+  $projectID: ID!
+) {
+  deleteProbe(
+    probeName: $probeName,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"probeName": 4, "projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"deleteProbe": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ disableGitOps +

+
+
+
+
Description
+

Disables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation DisableGitOps($projectID: ID!) {
+  disableGitOps(projectID: $projectID)
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"disableGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ enableGitOps +

+
+
+
+
Description
+

Enables gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation EnableGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  enableGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"enableGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ generateSSHKey +

+
+
+
+
Description
+

Generates Private and Public key for SSH authentication

+
+
+
+
+
+
+
Response
+

Returns an SSHKey! +

+
+
+
+

Example

+
+
Query
+ + +
mutation GenerateSSHKey {
+  generateSSHKey {
+    publicKey
+    privateKey
+  }
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "generateSSHKey": {
+      "publicKey": "xyz789",
+      "privateKey": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ getManifestWithInfraID +

+
+
+
+
Description
+

Fetches manifest details

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ infraID - String! + +
+ accessKey - String! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GetManifestWithInfraID(
+  $projectID: ID!,
+  $infraID: String!,
+  $accessKey: String!
+) {
+  getManifestWithInfraID(
+    projectID: $projectID,
+    infraID: $infraID,
+    accessKey: $accessKey
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "infraID": "abc123",
+  "accessKey": "xyz789"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getManifestWithInfraID": "xyz789"
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ gitopsNotifier +

+
+
+
+
Description
+

Sends workflow run request(single run workflow only) to agent on gitops notification

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ clusterInfo - InfraIdentity! + +
+ experimentID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation GitopsNotifier(
+  $clusterInfo: InfraIdentity!,
+  $experimentID: ID!
+) {
+  gitopsNotifier(
+    clusterInfo: $clusterInfo,
+    experimentID: $experimentID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"clusterInfo": InfraIdentity, "experimentID": 4}
+
+ + +
+
+
Response
+ + +
{"data": {"gitopsNotifier": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ kubeObj +

+
+
+
+
Description
+

Receives kubernetes object data from subscriber

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectData! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation KubeObj($request: KubeObjectData!) {
+  kubeObj(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectData}
+
+ + +
+
+
Response
+ + +
{"data": {"kubeObj": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ podLog +

+
+
+
+
Description
+

Receives pod logs for experiments from infra

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLog! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation PodLog($request: PodLog!) {
+  podLog(request: $request)
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLog}
+
+ + +
+
+
Response
+ + +
{"data": {"podLog": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ registerInfra +

+
+
+
+
Description
+

Connect a new infra for a user in a specified project

+
+
+
+
+
+
+
Response
+

Returns a RegisterInfraResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - RegisterInfraRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RegisterInfra(
+  $projectID: ID!,
+  $request: RegisterInfraRequest!
+) {
+  registerInfra(
+    projectID: $projectID,
+    request: $request
+  ) {
+    token
+    infraID
+    name
+    manifest
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": RegisterInfraRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "registerInfra": {
+      "token": "xyz789",
+      "infraID": "abc123",
+      "name": "xyz789",
+      "manifest": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ runChaosExperiment +

+
+
+
+
Description
+

Run the chaos experiment (used by frontend)

+
+
+
+
+
+
+
Response
+

Returns a RunChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation RunChaosExperiment(
+  $experimentID: String!,
+  $projectID: ID!
+) {
+  runChaosExperiment(
+    experimentID: $experimentID,
+    projectID: $projectID
+  ) {
+    notifyID
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "xyz789",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"runChaosExperiment": {"notifyID": 4}}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosExperiment +

+
+
+
+
Description
+

Saves a new experiment or updates if already exists

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - SaveChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosExperiment(
+  $request: SaveChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  saveChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": SaveChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"saveChaosExperiment": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ saveChaosHub +

+
+
+
+
Description
+

Save a ChaosHub configuration without cloning it

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - CreateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SaveChaosHub(
+  $projectID: ID!,
+  $request: CreateChaosHubRequest!
+) {
+  saveChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "request": CreateChaosHubRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "saveChaosHub": {
+      "id": "4",
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "projectID": "4",
+      "isDefault": true,
+      "name": "abc123",
+      "tags": ["abc123"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "abc123",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "abc123",
+      "userName": "abc123",
+      "password": "abc123",
+      "sshPrivateKey": "abc123",
+      "isRemoved": false,
+      "createdAt": "xyz789",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "xyz789"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ stopExperimentRuns +

+
+
+
+
Description
+

stopExperiment will halt all the ongoing runs of a particular experiment

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ experimentID - String! + +
+ experimentRunID - String + +
+ notifyID - String + +
+
+
+
+

Example

+
+
Query
+ + +
mutation StopExperimentRuns(
+  $projectID: ID!,
+  $experimentID: String!,
+  $experimentRunID: String,
+  $notifyID: String
+) {
+  stopExperimentRuns(
+    projectID: $projectID,
+    experimentID: $experimentID,
+    experimentRunID: $experimentRunID,
+    notifyID: $notifyID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "experimentID": "xyz789",
+  "experimentRunID": "xyz789",
+  "notifyID": "abc123"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"stopExperimentRuns": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ syncChaosHub +

+
+
+
+
Description
+

Sync changes from the Git repository of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ id - ID! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation SyncChaosHub(
+  $id: ID!,
+  $projectID: ID!
+) {
+  syncChaosHub(
+    id: $id,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "id": "4",
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"syncChaosHub": "abc123"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosExperiment +

+
+
+
+
Description
+

Updates the experiment

+
+
+
+
+
+
+
Response
+

Returns a ChaosExperimentResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ChaosExperimentRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosExperiment(
+  $request: ChaosExperimentRequest!,
+  $projectID: ID!
+) {
+  updateChaosExperiment(
+    request: $request,
+    projectID: $projectID
+  ) {
+    experimentID
+    projectID
+    cronSyntax
+    experimentName
+    experimentDescription
+    isCustomExperiment
+    tags
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ChaosExperimentRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosExperiment": {
+      "experimentID": "abc123",
+      "projectID": "4",
+      "cronSyntax": "abc123",
+      "experimentName": "abc123",
+      "experimentDescription": "xyz789",
+      "isCustomExperiment": true,
+      "tags": ["abc123"]
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateChaosHub +

+
+
+
+
Description
+

Update the configuration of a ChaosHub

+
+
+
+
+
+
+
Response
+

Returns a ChaosHub! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateChaosHubRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateChaosHub(
+  $projectID: ID!,
+  $request: UpdateChaosHubRequest!
+) {
+  updateChaosHub(
+    projectID: $projectID,
+    request: $request
+  ) {
+    id
+    repoURL
+    repoBranch
+    projectID
+    isDefault
+    name
+    tags
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    description
+    hubType
+    isPrivate
+    authType
+    token
+    userName
+    password
+    sshPrivateKey
+    isRemoved
+    createdAt
+    updatedAt
+    lastSyncedAt
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": UpdateChaosHubRequest
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateChaosHub": {
+      "id": 4,
+      "repoURL": "xyz789",
+      "repoBranch": "abc123",
+      "projectID": 4,
+      "isDefault": false,
+      "name": "abc123",
+      "tags": ["xyz789"],
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "description": "xyz789",
+      "hubType": "GIT",
+      "isPrivate": false,
+      "authType": "BASIC",
+      "token": "xyz789",
+      "userName": "xyz789",
+      "password": "xyz789",
+      "sshPrivateKey": "xyz789",
+      "isRemoved": true,
+      "createdAt": "abc123",
+      "updatedAt": "abc123",
+      "lastSyncedAt": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateCronExperimentState +

+
+
+
+
Description
+

Enable/Disable cron experiment state

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ experimentID - String! + +
+ disable - Boolean! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateCronExperimentState(
+  $experimentID: String!,
+  $disable: Boolean!,
+  $projectID: ID!
+) {
+  updateCronExperimentState(
+    experimentID: $experimentID,
+    disable: $disable,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "experimentID": "xyz789",
+  "disable": true,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateCronExperimentState": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateEnvironment +

+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ request - UpdateEnvironmentRequest + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateEnvironment(
+  $projectID: ID!,
+  $request: UpdateEnvironmentRequest
+) {
+  updateEnvironment(
+    projectID: $projectID,
+    request: $request
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "projectID": "4",
+  "request": UpdateEnvironmentRequest
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateEnvironment": "xyz789"}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateGitOps +

+
+
+
+
Description
+

Updates gitops settings in the project

+
+
+
+
+
+
+
Response
+

Returns a Boolean! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ projectID - ID! + +
+ configurations - GitConfig! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateGitOps(
+  $projectID: ID!,
+  $configurations: GitConfig!
+) {
+  updateGitOps(
+    projectID: $projectID,
+    configurations: $configurations
+  )
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": 4, "configurations": GitConfig}
+
+ + +
+
+
Response
+ + +
{"data": {"updateGitOps": true}}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateImageRegistry +

+
+
+
+
Description
+

Update the Image Registry configuration

+
+
+
+
+
+
+
Response
+

Returns an ImageRegistryResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ imageRegistryID - String! + +
+ projectID - String! + +
+ imageRegistryInfo - ImageRegistryInput! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateImageRegistry(
+  $imageRegistryID: String!,
+  $projectID: String!,
+  $imageRegistryInfo: ImageRegistryInput!
+) {
+  updateImageRegistry(
+    imageRegistryID: $imageRegistryID,
+    projectID: $projectID,
+    imageRegistryInfo: $imageRegistryInfo
+  ) {
+    isDefault
+    imageRegistryInfo {
+      isDefault
+      imageRegistryName
+      imageRepoName
+      imageRegistryType
+      secretName
+      secretNamespace
+      enableRegistry
+    }
+    imageRegistryID
+    projectID
+    updatedAt
+    createdAt
+    createdBy {
+      userID
+      username
+      email
+    }
+    updatedBy {
+      userID
+      username
+      email
+    }
+    isRemoved
+  }
+}
+
+ + +
+
+
Variables
+ + +
{
+  "imageRegistryID": "abc123",
+  "projectID": "xyz789",
+  "imageRegistryInfo": ImageRegistryInput
+}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "updateImageRegistry": {
+      "isDefault": false,
+      "imageRegistryInfo": ImageRegistry,
+      "imageRegistryID": "abc123",
+      "projectID": "xyz789",
+      "updatedAt": "abc123",
+      "createdAt": "xyz789",
+      "createdBy": UserDetails,
+      "updatedBy": UserDetails,
+      "isRemoved": false
+    }
+  }
+}
+
+ + +
+
+
+
+
+
+ Mutations +
+

+ updateProbe +

+
+
+
+
Description
+

Update the configuration of a Probe

+
+
+
+
+
+
+
Response
+

Returns a String! +

+
+
+
Arguments
+ + + + + + + + + + + + + + + + + +
NameDescription
+ request - ProbeRequest! + +
+ projectID - ID! + +
+
+
+
+

Example

+
+
Query
+ + +
mutation UpdateProbe(
+  $request: ProbeRequest!,
+  $projectID: ID!
+) {
+  updateProbe(
+    request: $request,
+    projectID: $projectID
+  )
+}
+
+ + +
+
+
Variables
+ + +
{
+  "request": ProbeRequest,
+  "projectID": "4"
+}
+
+ + +
+
+
Response
+ + +
{"data": {"updateProbe": "xyz789"}}
+
+ + +
+
+
+
+

Subscriptions

+
+

+ getInfraEvents +

+
+
+
+
Description
+

Listens infra events from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraEventResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ projectID - String! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetInfraEvents($projectID: String!) {
+  getInfraEvents(projectID: $projectID) {
+    eventID
+    eventType
+    eventName
+    description
+    infra {
+      projectID
+      infraID
+      name
+      description
+      tags
+      environmentID
+      platformName
+      isActive
+      isInfraConfirmed
+      isRemoved
+      updatedAt
+      createdAt
+      noOfExperiments
+      noOfExperimentRuns
+      token
+      infraNamespace
+      serviceAccount
+      infraScope
+      infraNsExists
+      infraSaExists
+      lastExperimentTimestamp
+      startTime
+      version
+      createdBy {
+        ...UserDetailsFragment
+      }
+      updatedBy {
+        ...UserDetailsFragment
+      }
+      infraType
+      updateStatus
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"projectID": "abc123"}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getInfraEvents": {
+      "eventID": 4,
+      "eventType": "abc123",
+      "eventName": "xyz789",
+      "description": "xyz789",
+      "infra": Infra
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getKubeObject +

+
+
+
+
Description
+

Returns a kubernetes object given an input

+
+
+
+
+
+
+
Response
+

Returns a KubeObjectResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - KubeObjectRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetKubeObject($request: KubeObjectRequest!) {
+  getKubeObject(request: $request) {
+    infraID
+    kubeObj {
+      namespace
+      data {
+        ...ObjectDataFragment
+      }
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": KubeObjectRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getKubeObject": {
+      "infraID": "4",
+      "kubeObj": [KubeObject]
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ getPodLog +

+
+
+
+
Description
+

Returns experiment logs from the pods

+
+
+
+
+
+
+
Response
+

Returns a PodLogResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - PodLogRequest! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription GetPodLog($request: PodLogRequest!) {
+  getPodLog(request: $request) {
+    experimentRunID
+    podName
+    podType
+    log
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": PodLogRequest}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "getPodLog": {
+      "experimentRunID": "4",
+      "podName": "abc123",
+      "podType": "xyz789",
+      "log": "abc123"
+    }
+  }
+}
+
+ + +
+
+
+
+
+ +

+ infraConnect +

+
+
+
+
Description
+

Listens infra operation request from the graphql server

+
+
+
+
+
+
+
Response
+

Returns an InfraActionResponse! +

+
+
+
Arguments
+ + + + + + + + + + + + + +
NameDescription
+ request - InfraIdentity! + +
+
+
+
+

Example

+
+
Query
+ + +
subscription InfraConnect($request: InfraIdentity!) {
+  infraConnect(request: $request) {
+    projectID
+    action {
+      requestID
+      requestType
+      k8sManifest
+      namespace
+      externalData
+      username
+    }
+  }
+}
+
+ + +
+
+
Variables
+ + +
{"request": InfraIdentity}
+
+ + +
+
+
Response
+ + +
{
+  "data": {
+    "infraConnect": {
+      "projectID": "xyz789",
+      "action": ActionPayload
+    }
+  }
+}
+
+ + +
+
+
+
+

Types

+
+

ActionPayload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
requestID - String! + +
requestType - String! + +
k8sManifest - String! + +
namespace - String! + +
externalData - String + +
username - String + +
+
+
+
+
+
Example
+ + +
{
+  "requestID": "xyz789",
+  "requestType": "xyz789",
+  "k8sManifest": "xyz789",
+  "namespace": "abc123",
+  "externalData": "abc123",
+  "username": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Annotation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
categories - String! + +
vendor - String! + +
createdAt - String! + +
repository - String! + +
support - String! + +
chartDescription - String! + +
+
+
+
+
+
Example
+ + +
{
+  "categories": "abc123",
+  "vendor": "xyz789",
+  "createdAt": "abc123",
+  "repository": "abc123",
+  "support": "abc123",
+  "chartDescription": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Audit

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
updatedAt - String + +
createdAt - String + +
updatedBy - UserDetails + +
createdBy - UserDetails + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Audit Types
+

ExperimentRun

+
+

RecentExperimentRun

+
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

ImageRegistryResponse

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

AuthType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

BASIC

+
+
+

NONE

+
+
+

SSH

+
+
+

TOKEN

+
+
+
+
+
+
+
Example
+ + +
"BASIC"
+
+ + +
+
+
+
+
+
+ Types +
+

Boolean

+
+
+
+
Description
+

The Boolean scalar type represents true or false.

+
+
+
+
+
Example
+ + +
true
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String + ID of the experiment
+ runExperiment - Boolean + Boolean check indicating if the created scenario will be executed or not
+ experimentManifest - String! + Manifest of the experiment
+ experimentType - ExperimentType + Type of the experiment
+ cronSyntax - String! + Cron syntax of the experiment schedule
+ experimentName - String! + Name of the experiment
+ experimentDescription - String! + Description of the experiment
+ weightages - [WeightagesInput!]! + Array containing weightage and name of each chaos experiment in the experiment
+ isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
+ infraID - ID! + ID of the target infra in which the experiment will run
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "runExperiment": true,
+  "experimentManifest": "abc123",
+  "experimentType": "All",
+  "cronSyntax": "xyz789",
+  "experimentName": "xyz789",
+  "experimentDescription": "xyz789",
+  "weightages": [WeightagesInput],
+  "isCustomExperiment": true,
+  "infraID": 4,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosExperimentResponse

+
+
+
+
Description
+

Defines the response received for querying the details of chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + ID of the experiment
projectID - ID! + +
cronSyntax - String! + Cron syntax of the experiment schedule
experimentName - String! + Name of the experiment
experimentDescription - String! + Description of the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "abc123",
+  "projectID": 4,
+  "cronSyntax": "abc123",
+  "experimentName": "abc123",
+  "experimentDescription": "xyz789",
+  "isCustomExperiment": true,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the chaos hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
projectID - ID! + ID of the project in which the chaos hub is present
isDefault - Boolean! + Default Hub Identifier
name - String! + Name of the chaos hub
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
description - String + Description of ChaosHub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
isRemoved - Boolean! + Bool value indicating if the chaos hub is removed
createdAt - String! + Timestamp when the chaos hub was created
updatedAt - String! + Timestamp when the chaos hub was last updated
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
+
+
+
+
+
Example
+ + +
{
+  "id": "4",
+  "repoURL": "xyz789",
+  "repoBranch": "abc123",
+  "projectID": 4,
+  "isDefault": false,
+  "name": "abc123",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "description": "abc123",
+  "hubType": "GIT",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789",
+  "isRemoved": true,
+  "createdAt": "abc123",
+  "updatedAt": "abc123",
+  "lastSyncedAt": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubFilterInput

+
+
+
+
Description
+

Defines filter options for ChaosHub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubName - String + Name of the ChaosHub
+ tags - [String!] + Tags of a chaos hub
+ description - String + Description of a chaos hub
+
+
+
+
+
Example
+ + +
{
+  "chaosHubName": "xyz789",
+  "tags": ["abc123"],
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ChaosHubStatus

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
id - ID! + ID of the hub
repoURL - String! + URL of the git repository
repoBranch - String! + Branch of the git repository
isAvailable - Boolean! + Bool value indicating whether the hub is available or not.
totalFaults - String! + Total number of experiments in the hub
totalExperiments - String! + Total experiments
name - String! + Name of the chaos hub
hubType - HubType! + Type of ChaosHub
isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token for authentication of private chaos hub
userName - String + Git username
password - String + Git password
isRemoved - Boolean! + Bool value indicating whether the hub is private or not.
sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
sshPublicKey - String + Public SSH key for authenticating into private chaos hub
lastSyncedAt - String! + Timestamp when the chaos hub was last synced
tags - [String!] + Tags of the ChaosHub
createdBy - UserDetails + User who created the ChaosHub
updatedBy - UserDetails + User who has updated the ChaosHub
createdAt - String! + Created at timestamp
updatedAt - String! + Updated at timestamp
description - String + Description of ChaosHub
isDefault - Boolean! + Default Hub Identifier
+
+
+
+
+
Example
+ + +
{
+  "id": 4,
+  "repoURL": "abc123",
+  "repoBranch": "abc123",
+  "isAvailable": true,
+  "totalFaults": "abc123",
+  "totalExperiments": "xyz789",
+  "name": "abc123",
+  "hubType": "GIT",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "abc123",
+  "isRemoved": true,
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "xyz789",
+  "lastSyncedAt": "abc123",
+  "tags": ["xyz789"],
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "createdAt": "abc123",
+  "updatedAt": "abc123",
+  "description": "xyz789",
+  "isDefault": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Chart

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
apiVersion - String! + +
kind - String! + +
metadata - Metadata! + +
spec - Spec! + +
packageInfo - PackageInformation! + +
+
+
+
+
+
Example
+ + +
{
+  "apiVersion": "xyz789",
+  "kind": "xyz789",
+  "metadata": Metadata,
+  "spec": Spec,
+  "packageInfo": PackageInformation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CommonProbeProperties

+
+
+
+
Description
+

Defines the common probe properties shared across different ProbeTypes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + +
CommonProbeProperties Types
+

KubernetesCMDProbe

+
+

PROMProbe

+
+

KubernetesHTTPProbe

+
+

K8SProbe

+
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Comparator

+
+
+
+
Description
+

Defines the properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
type - String! + Type of the Comparator
value - String! + Value of the Comparator
criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "xyz789",
+  "value": "xyz789",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ComparatorInput

+
+
+
+
Description
+

Defines the input properties of the comparator

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ type - String! + Type of the Comparator
+ value - String! + Value of the Comparator
+ criteria - String! + Operator of the Comparator
+
+
+
+
+
Example
+ + +
{
+  "type": "xyz789",
+  "value": "abc123",
+  "criteria": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ConfirmInfraRegistrationResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isInfraConfirmed - Boolean! + +
newAccessKey - String + +
infraID - String + +
+
+
+
+
+
Example
+ + +
{
+  "isInfraConfirmed": false,
+  "newAccessKey": "xyz789",
+  "infraID": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateChaosHubRequest

+
+
+
+
Description
+

Defines the details required for creating a chaos hub

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "tags": ["abc123"],
+  "description": "abc123",
+  "repoURL": "xyz789",
+  "repoBranch": "abc123",
+  "isPrivate": false,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "abc123",
+  "sshPublicKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String! + +
+ type - EnvironmentType! + +
+ description - String + +
+ tags - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "xyz789",
+  "name": "xyz789",
+  "type": "PROD",
+  "description": "abc123",
+  "tags": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

CreateRemoteChaosHub

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the chaos hub
+ tags - [String!] + Tags of the ChaosHub
+ description - String + Description of ChaosHub
+ repoURL - String! + URL of the git repository
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "tags": ["xyz789"],
+  "description": "abc123",
+  "repoURL": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

DateRange

+
+
+
+
Description
+

Defines the start date and end date for the filtering the data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ startDate - String! + Start date
+ endDate - String + End date
+
+
+
+
+
Example
+ + +
{
+  "startDate": "abc123",
+  "endDate": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Environment

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
environmentID - String! + +
name - String! + +
description - String + +
tags - [String!] + +
type - EnvironmentType! + +
createdAt - String! + +
createdBy - UserDetails + +
updatedBy - UserDetails + +
updatedAt - String! + +
isRemoved - Boolean + +
infraIDs - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "abc123",
+  "environmentID": "abc123",
+  "name": "abc123",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "type": "PROD",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "updatedAt": "xyz789",
+  "isRemoved": false,
+  "infraIDs": ["xyz789"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the environment
+ description - String + ID of the environment
+ type - EnvironmentType + Type name of environment
+ tags - [String!] + Tags of an environment
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "description": "xyz789",
+  "type": "PROD",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - EnvironmentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": false}
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

EnvironmentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

PROD

+
+
+

NON_PROD

+
+
+
+
+
+
+
Example
+ + +
"PROD"
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutedByExperiment

+
+
+
+
Description
+

Defines the Executed by which experiment details for Probes

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentID - String! + Experiment ID
experimentName - String! + Experiment Name
updatedAt - Int! + Timestamp at which the experiment was last updated
updatedBy - UserDetails + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "experimentName": "xyz789",
+  "updatedAt": 987,
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExecutionHistory

+
+
+
+
Description
+

Defines the Execution History of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
mode - Mode! + Probe Mode
faultName - String! + Fault Name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "mode": "SOT",
+  "faultName": "abc123",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Experiment

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentID - String! + ID of the experiment
experimentType - String + Type of the experiment
experimentManifest - String! + Manifest of the experiment
cronSyntax - String! + Cron syntax of the experiment schedule
name - String! + Name of the experiment
description - String! + Description of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
isCustomExperiment - Boolean! + Bool value indicating whether the experiment is a custom experiment or not
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
infra - Infra + Target infra in which the experiment will run
isRemoved - Boolean! + Bool value indicating if the experiment has removed
tags - [String!] + Tags of the experiment
createdBy - UserDetails + User who created the experiment
recentExperimentRunDetails - [RecentExperimentRun] + Array of object containing details of recent experiment runs
updatedBy - UserDetails + Details of the user who updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "experimentID": "abc123",
+  "experimentType": "xyz789",
+  "experimentManifest": "abc123",
+  "cronSyntax": "abc123",
+  "name": "xyz789",
+  "description": "abc123",
+  "weightages": [Weightages],
+  "isCustomExperiment": false,
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "infra": Infra,
+  "isRemoved": true,
+  "tags": ["abc123"],
+  "createdBy": UserDetails,
+  "recentExperimentRunDetails": [RecentExperimentRun],
+  "updatedBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentFilterInput

+
+
+
+
Description
+

Defines filter options for experiments

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraName - String + Name of the infra in which the experiment is running
+ infraID - String + ID of the infra in which the experiment is running
+ infraActive - Boolean + Bool value indicating if Chaos Infrastructure is active
+ scheduleType - ScheduleType + Scenario type of the experiment i.e. CRON or NON_CRON
+ status - String + Status of the latest experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "abc123",
+  "infraName": "xyz789",
+  "infraID": "xyz789",
+  "infraActive": false,
+  "scheduleType": "CRON",
+  "status": "xyz789",
+  "dateRange": DateRange,
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ category - String! + Name of the chart being used
+ experimentName - String! + Name of the experiment
+ hubID - String! + ID of the hub
+
+
+
+
+
Example
+ + +
{
+  "category": "xyz789",
+  "experimentName": "xyz789",
+  "hubID": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRun

+
+
+
+
Description
+

Defines the details of a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
experimentRunID - ID! + ID of the experiment run which is to be queried
experimentType - String + Type of the experiment
experimentID - ID! + ID of the experiment
weightages - [Weightages!]! + Array containing weightage and name of each chaos fault in the experiment
updatedAt - String! + Timestamp at which experiment run was last updated
createdAt - String! + Timestamp at which experiment run was created
infra - Infra! + Target infra in which the experiment will run
experimentName - String! + Name of the experiment
experimentManifest - String! + Manifest of the experiment run
phase - ExperimentRunStatus! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
faultsPassed - Int + Number of faults passed
faultsFailed - Int + Number of faults failed
faultsAwaited - Int + Number of faults awaited
faultsStopped - Int + Number of faults stopped
faultsNa - Int + Number of faults which are not available
totalFaults - Int + Total number of faults
executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the faults
isRemoved - Boolean + Bool value indicating if the experiment run has removed
updatedBy - UserDetails + User who has updated the experiment
createdBy - UserDetails + User who has created the experiment run
notifyID - ID + Notify ID of the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "experimentRunID": 4,
+  "experimentType": "xyz789",
+  "experimentID": 4,
+  "weightages": [Weightages],
+  "updatedAt": "abc123",
+  "createdAt": "xyz789",
+  "infra": Infra,
+  "experimentName": "xyz789",
+  "experimentManifest": "xyz789",
+  "phase": "All",
+  "resiliencyScore": 987.65,
+  "faultsPassed": 987,
+  "faultsFailed": 987,
+  "faultsAwaited": 987,
+  "faultsStopped": 123,
+  "faultsNa": 987,
+  "totalFaults": 123,
+  "executionData": "xyz789",
+  "isRemoved": false,
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails,
+  "notifyID": "4",
+  "runSequence": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunFilterInput

+
+
+
+
Description
+

Defines input type for experiment run filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentName - String + Name of the experiment
+ infraID - String + Name of the infra infra
+ experimentType - ScheduleType + Type of the experiment
+ experimentStatus - ExperimentRunStatus + Status of the experiment run
+ dateRange - DateRange + Date range for filtering purpose
+ experimentRunID - String + ID of experiment run
+ experimentRunStatus - [String] + Array of experiment run status
+ infraTypes - [InfrastructureType] + Type of infras
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "xyz789",
+  "infraID": "xyz789",
+  "experimentType": "CRON",
+  "experimentStatus": "All",
+  "dateRange": DateRange,
+  "experimentRunID": "abc123",
+  "experimentRunStatus": ["abc123"],
+  "infraTypes": ["Kubernetes"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunRequest

+
+
+
+
Description
+

Defines the details for a experiment run

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentID - String! + ID of the experiment
+ notifyID - String + notifyID is required to give an ack for non cron experiment execution
+ experimentRunID - String! + ID of the experiment run which is to be queried
+ experimentName - String! + Name of the experiment
+ executionData - String! + Stores all the experiment run details related to the nodes of DAG graph and chaos results of the experiments
+ infraID - InfraIdentity! + ID of the infra infra in which the experiment is running
+ revisionID - String! + ID of the revision which consists manifest details
+ completed - Boolean! + Bool value indicating if the experiment run has completed
+ isRemoved - Boolean + Bool value indicating if the experiment run has removed
+ updatedBy - String! + User who has updated the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentID": "xyz789",
+  "notifyID": "xyz789",
+  "experimentRunID": "abc123",
+  "experimentName": "xyz789",
+  "executionData": "abc123",
+  "infraID": InfraIdentity,
+  "revisionID": "abc123",
+  "completed": false,
+  "isRemoved": true,
+  "updatedBy": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunSortInput

+
+
+
+
Description
+

Defines sorting options for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": true}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentRunStatus

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Running

+
+
+

Completed

+
+
+

Completed_With_Error

+
+
+

Stopped

+
+
+

Skipped

+
+
+

Error

+
+
+

Timeout

+
+
+

Terminated

+
+
+

Queued

+
+
+

NA

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortInput

+
+
+
+
Description
+

Defines sorting options for experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ field - ExperimentSortingField! + Field in which sorting will be done
+ ascending - Boolean + Bool value indicating whether the sorting will be done in ascending order
+
+
+
+
+
Example
+ + +
{"field": "NAME", "ascending": false}
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentSortingField

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

NAME

+
+
+

TIME

+
+
+
+
+
+
+
Example
+ + +
"NAME"
+
+ + +
+
+
+
+
+
+ Types +
+

ExperimentType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

All

+
+
+

Experiment

+
+
+

CronExperiment

+
+
+

ChaosEngine

+
+
+

ChaosSchedule

+
+
+
+
+
+
+
Example
+ + +
"All"
+
+ + +
+
+
+
+
+
+ Types +
+

Experiments

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
CSV - String! + +
desc - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "CSV": "abc123",
+  "desc": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultDetails

+
+
+
+
Description
+

Fault Detail consists of all the fault related details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
fault - String! + fault consists of fault.yaml
engine - String! + engine consists engine.yaml
csv - String! + csv consists chartserviceversion.yaml
+
+
+
+
+
Example
+ + +
{
+  "fault": "abc123",
+  "engine": "xyz789",
+  "csv": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

FaultList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
displayName - String! + +
description - String! + +
plan - [String!] + +
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "displayName": "abc123",
+  "description": "abc123",
+  "plan": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Float

+
+
+
+
Description
+

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

+
+
+
+
+
Example
+ + +
987.65
+
+ + +
+
+
+
+
+
+ Types +
+

GET

+
+
+
+
Description
+

Details of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "abc123",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GETRequest

+
+
+
+
Description
+

Details for input of GET request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "criteria": "xyz789",
+  "responseCode": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetChaosHubStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
totalChaosHubs - Int! + Total number of chaoshubs
+
+
+
+
+
Example
+ + +
{"totalChaosHubs": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentResponse

+
+
+
+
Description
+

Defines the details for a given experiment with some additional data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
experimentDetails - Experiment! + Details of experiment
averageResiliencyScore - Float + Average resiliency score of the experiment
+
+
+
+
+
Example
+ + +
{
+  "experimentDetails": Experiment,
+  "averageResiliencyScore": 123.45
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentRunStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperimentRuns - Int! + Total number of experiment runs
totalCompletedExperimentRuns - Int! + Total number of completed experiments runs
totalTerminatedExperimentRuns - Int! + Total number of stopped experiment runs
totalRunningExperimentRuns - Int! + Total number of running experiment runs
totalStoppedExperimentRuns - Int! + Total number of stopped experiment runs
totalErroredExperimentRuns - Int! + Total number of errored experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalExperimentRuns": 987,
+  "totalCompletedExperimentRuns": 987,
+  "totalTerminatedExperimentRuns": 987,
+  "totalRunningExperimentRuns": 987,
+  "totalStoppedExperimentRuns": 987,
+  "totalErroredExperimentRuns": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetExperimentStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalExperiments - Int! + Total number of experiments
totalExpCategorizedByResiliencyScore - [ResilienceScoreCategory]! + Total number of cron experiments
+
+
+
+
+
Example
+ + +
{
+  "totalExperiments": 123,
+  "totalExpCategorizedByResiliencyScore": [
+    ResilienceScoreCategory
+  ]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetInfraStatsResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
totalInfrastructures - Int! + Total number of infrastructures
totalActiveInfrastructure - Int! + Total number of active infrastructures
totalInactiveInfrastructures - Int! + Total number of inactive infrastructures
totalConfirmedInfrastructure - Int! + Total number of confirmed infrastructures
totalNonConfirmedInfrastructures - Int! + Total number of non confirmed infrastructures
+
+
+
+
+
Example
+ + +
{
+  "totalInfrastructures": 987,
+  "totalActiveInfrastructure": 987,
+  "totalInactiveInfrastructures": 987,
+  "totalConfirmedInfrastructure": 987,
+  "totalNonConfirmedInfrastructures": 987
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeReferenceResponse

+
+
+
+
Description
+

Defines the response of the Probe reference API

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
totalRuns - Int! + Total Runs
recentExecutions - [RecentExecutions]! + Recent Executions of the probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": 4,
+  "name": "xyz789",
+  "totalRuns": 987,
+  "recentExecutions": [RecentExecutions]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbeYAMLRequest

+
+
+
+
Description
+

Defines the input requests for GetProbeYAML query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeName - ID! + Probe name of the probe
+ mode - Mode! + Mode of the Probe (SoT, EoT, Edge, Continuous or OnChaos)
+
+
+
+
+
Example
+ + +
{"probeName": "4", "mode": "SOT"}
+
+ + +
+
+
+
+
+
+ Types +
+

GetProbesInExperimentRunResponse

+
+
+
+
Description
+

Defines the response for Get Probe In Experiment Run Query

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probe - Probe! + Probe Object
mode - Mode! + Mode of the probe
status - Status! + Status of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probe": Probe,
+  "mode": "SOT",
+  "status": Status
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfig

+
+
+
+
Description
+

Details of setting a Git repository

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ branch - String! + Git branch where the chaos charts will be pushed and synced
+ repoURL - String! + URL of the Git repository
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token used for private repository
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "branch": "xyz789",
+  "repoURL": "xyz789",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "abc123",
+  "password": "abc123",
+  "sshPrivateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

GitConfigResponse

+
+
+
+
Description
+

Response received after configuring GitOps

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
enabled - Boolean! + Bool value indicating whether GitOps is enabled or not
projectID - String! + ID of the project where GitOps is configured
branch - String + Git branch where the chaos charts will be pushed and synced
repoURL - String + URL of the Git repository
authType - AuthType + Type of authentication used: BASIC, SSH, TOKEN
token - String + Token used for private repository
userName - String + Git username
password - String + Git password
sshPrivateKey - String + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "enabled": false,
+  "projectID": "abc123",
+  "branch": "abc123",
+  "repoURL": "xyz789",
+  "authType": "BASIC",
+  "token": "abc123",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

HubType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

GIT

+
+
+

REMOTE

+
+
+
+
+
+
+
Example
+ + +
"GIT"
+
+ + +
+
+
+
+
+
+ Types +
+

ID

+
+
+
+
Description
+

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

+
+
+
+
+
Example
+ + +
"4"
+
+ + +
+
+
+
+
+
+ Types +
+

INFRA_SCOPE

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

namespace

+
+
+

cluster

+
+
+
+
+
+
+
Example
+ + +
"namespace"
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistry

+
+
+
+
Description
+

Defines details for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryName - String! + Name of Image Registry
imageRepoName - String! + Name of image repository
imageRegistryType - String! + Type of the image registry: public/private
secretName - String + Secret which is used for private registry
secretNamespace - String + Namespace where the secret is available
enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": false,
+  "imageRegistryName": "xyz789",
+  "imageRepoName": "abc123",
+  "imageRegistryType": "xyz789",
+  "secretName": "xyz789",
+  "secretNamespace": "abc123",
+  "enableRegistry": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryInput

+
+
+
+
Description
+

Defines input data for querying the details of an image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
+ imageRegistryName - String! + Name of Image Registry
+ imageRepoName - String! + Name of image repository
+ imageRegistryType - String! + Type of the image registry: public/private
+ secretName - String + Secret which is used for private registry
+ secretNamespace - String + Namespace where the secret is available
+ enableRegistry - Boolean + Bool value indicating if image registry is enabled or not
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryName": "abc123",
+  "imageRepoName": "xyz789",
+  "imageRegistryType": "abc123",
+  "secretName": "abc123",
+  "secretNamespace": "xyz789",
+  "enableRegistry": false
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ImageRegistryResponse

+
+
+
+
Description
+

Defines response data for image registry

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
isDefault - Boolean! + Bool value indicating if the image registry is default or not; by default workflow uses LitmusChaos registry
imageRegistryInfo - ImageRegistry + Information Image Registry
imageRegistryID - String! + ID of the image registry
projectID - String! + ID of the project in which image registry is created
updatedAt - String + Timestamp when the image registry was last updated
createdAt - String + Timestamp when the image registry was created
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
isRemoved - Boolean + Bool value indicating if the image registry has been removed
+
+
+
+
+
Example
+ + +
{
+  "isDefault": true,
+  "imageRegistryInfo": ImageRegistry,
+  "imageRegistryID": "abc123",
+  "projectID": "xyz789",
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "isRemoved": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Infra

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + +
infraID - ID! + ID of the infra
name - String! + Name of the infra
description - String + Description of the infra
tags - [String!] + Tags of the infra
environmentID - String! + Environment ID for the infra
platformName - String! + Infra Platform Name eg. GKE,AWS, Others
isActive - Boolean! + Boolean value indicating if chaos infrastructure is active or not
isInfraConfirmed - Boolean! + Boolean value indicating if chaos infrastructure is confirmed or not
isRemoved - Boolean! + Boolean value indicating if chaos infrastructure is removed or not
updatedAt - String! + Timestamp when the infra was last updated
createdAt - String! + Timestamp when the infra was created
noOfExperiments - Int + Number of schedules created in the infra
noOfExperimentRuns - Int + Number of experiments run in the infra
token - String! + Token used to verify and retrieve the infra manifest
infraNamespace - String + Namespace where the infra is being installed
serviceAccount - String + Name of service account used by infra
infraScope - String! + Scope of the infra : ns or cluster
infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
lastExperimentTimestamp - String + Timestamp of the last experiment run in the infra
startTime - String! + Timestamp when the infra got connected
version - String! + Version of the infra
createdBy - UserDetails + User who created the infra
updatedBy - UserDetails + User who has updated the infra
infraType - InfrastructureType + Type of the infrastructure
updateStatus - UpdateStatus! + update status of infra
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "infraID": "4",
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["xyz789"],
+  "environmentID": "abc123",
+  "platformName": "abc123",
+  "isActive": false,
+  "isInfraConfirmed": false,
+  "isRemoved": false,
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "noOfExperiments": 987,
+  "noOfExperimentRuns": 987,
+  "token": "xyz789",
+  "infraNamespace": "xyz789",
+  "serviceAccount": "xyz789",
+  "infraScope": "abc123",
+  "infraNsExists": false,
+  "infraSaExists": false,
+  "lastExperimentTimestamp": "abc123",
+  "startTime": "xyz789",
+  "version": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "infraType": "Kubernetes",
+  "updateStatus": "AVAILABLE"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraActionResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - String! + +
action - ActionPayload! + +
+
+
+
+
+
Example
+ + +
{
+  "projectID": "xyz789",
+  "action": ActionPayload
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraEventResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
eventID - ID! + +
eventType - String! + +
eventName - String! + +
description - String! + +
infra - Infra! + +
+
+
+
+
+
Example
+ + +
{
+  "eventID": 4,
+  "eventType": "abc123",
+  "eventName": "abc123",
+  "description": "abc123",
+  "infra": Infra
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraFilterInput

+
+
+
+
Description
+

Defines filter options for infras

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the infra
+ infraID - String + ID of the infra
+ description - String + ID of the infra
+ platformName - String + Platform name of infra
+ infraScope - INFRA_SCOPE + Scope of infra
+ isActive - Boolean + Status of infra
+ tags - [String] + Tags of an infra
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "infraID": "abc123",
+  "description": "abc123",
+  "platformName": "abc123",
+  "infraScope": "namespace",
+  "isActive": true,
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraIdentity

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - String! + +
+ accessKey - String! + +
+ version - String! + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "xyz789",
+  "accessKey": "xyz789",
+  "version": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfraVersionDetails

+
+
+
+
Description
+

InfraVersionDetails returns the details of compatible infra versions and the latest infra version supported

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
latestVersion - String! + Latest infra version supported
compatibleVersions - [String!]! + List of all infra versions supported
+
+
+
+
+
Example
+ + +
{
+  "latestVersion": "xyz789",
+  "compatibleVersions": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

InfrastructureType

+
+
+
+
Values
+ + + + + + + + + + + + + +
Enum ValueDescription
+

Kubernetes

+
+
+
+
+
+
+
Example
+ + +
"Kubernetes"
+
+ + +
+
+
+
+
+
+ Types +
+

Int

+
+
+
+
Description
+

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

+
+
+
+
+
Example
+ + +
987
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbe

+
+
+
+
Description
+

Defines the K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
group - String + Group of the Probe
version - String! + Version of the Probe
resource - String! + Resource of the Probe
namespace - String + Namespace of the Probe
resourceNames - String + Resource Names of the Probe
fieldSelector - String + Field Selector of the Probe
labelSelector - String + Label Selector of the Probe
operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "group": "abc123",
+  "version": "xyz789",
+  "resource": "xyz789",
+  "namespace": "abc123",
+  "resourceNames": "abc123",
+  "fieldSelector": "abc123",
+  "labelSelector": "xyz789",
+  "operation": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

K8SProbeRequest

+
+
+
+
Description
+

Defines the input for K8S probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ group - String + Group of the Probe
+ version - String! + Version of the Probe
+ resource - String! + Resource of the Probe
+ namespace - String + Namespace of the Probe
+ resourceNames - String + Resource Names of the Probe
+ fieldSelector - String + Field Selector of the Probe
+ labelSelector - String + Label Selector of the Probe
+ operation - String! + Operation of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "group": "xyz789",
+  "version": "xyz789",
+  "resource": "xyz789",
+  "namespace": "abc123",
+  "resourceNames": "xyz789",
+  "fieldSelector": "abc123",
+  "labelSelector": "abc123",
+  "operation": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeGVRRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ group - String! + +
+ version - String! + +
+ resource - String! + +
+
+
+
+
+
Example
+ + +
{
+  "group": "xyz789",
+  "version": "xyz789",
+  "resource": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObject

+
+
+
+
Description
+

KubeObject consists of the namespace and the available resources in the same

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
namespace - String! + Namespace of the resource
data - [ObjectData]! + Details of the resource
+
+
+
+
+
Example
+ + +
{
+  "namespace": "xyz789",
+  "data": [ObjectData]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectData

+
+
+
+
Description
+

Defines the details of Kubernetes object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ requestID - ID! + Unique request ID for fetching Kubernetes object details
+ infraID - InfraIdentity! + ID of the infra in which the Kubernetes object is present
+ kubeObj - String! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{
+  "requestID": "4",
+  "infraID": InfraIdentity,
+  "kubeObj": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectRequest

+
+
+
+
Description
+

Defines details for fetching Kubernetes object data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the infra in which the Kubernetes object is present
+ kubeObjRequest - KubeGVRRequest + GVR Request
+ objectType - String! + +
+ workloads - [Workload] + +
+
+
+
+
+
Example
+ + +
{
+  "infraID": "4",
+  "kubeObjRequest": KubeGVRRequest,
+  "objectType": "abc123",
+  "workloads": [Workload]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubeObjectResponse

+
+
+
+
Description
+

Response received for querying Kubernetes Object

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
infraID - ID! + ID of the infra in which the Kubernetes object is present
kubeObj - [KubeObject]! + Type of the Kubernetes object
+
+
+
+
+
Example
+ + +
{"infraID": 4, "kubeObj": [KubeObject]}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbe

+
+
+
+
Description
+

Defines the CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
command - String! + Command of the Probe
comparator - Comparator! + Comparator of the Probe
source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "command": "abc123",
+  "comparator": Comparator,
+  "source": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesCMDProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes CMD probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ command - String! + Command of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+ source - String + Source of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 123,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "command": "xyz789",
+  "comparator": ComparatorInput,
+  "source": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbe

+
+
+
+
Description
+

Defines the Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
url - String! + URL of the Probe
method - Method! + HTTP method of the Probe
insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": true,
+  "url": "abc123",
+  "method": Method,
+  "insecureSkipVerify": true
+}
+
+ + +
+
+
+
+
+
+ Types +
+

KubernetesHTTPProbeRequest

+
+
+
+
Description
+

Defines the input for Kubernetes HTTP probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ url - String! + URL of the Probe
+ method - MethodRequest! + HTTP method of the Probe
+ insecureSkipVerify - Boolean + If Insecure HTTP verification should be skipped
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": true,
+  "url": "abc123",
+  "method": MethodRequest,
+  "insecureSkipVerify": false
+}
+
+ + +
+
+
+
+ +
+
+ Types +
+

ListChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ chaosHubIDs - [ID!] + Array of ChaosHub IDs for which details will be fetched
+ filter - ChaosHubFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "chaosHubIDs": ["4"],
+  "filter": ChaosHubFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - EnvironmentFilterInput + Details for fetching filtered data
+ sort - EnvironmentSortInput + Details for fetching sorted data
+
+
+
+
+
Example
+ + +
{
+  "environmentIDs": ["4"],
+  "pagination": Pagination,
+  "filter": EnvironmentFilterInput,
+  "sort": EnvironmentSortInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListEnvironmentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfEnvironments - Int! + Total number of environment
environments - [Environment] + +
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfEnvironments": 123,
+  "environments": [Environment]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRequest

+
+
+
+
Description
+

Defines the details for a experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentSortInput + Details for fetching sorted data
+ filter - ExperimentFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentIDs": ["4"],
+  "pagination": Pagination,
+  "sort": ExperimentSortInput,
+  "filter": ExperimentFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentResponse

+
+
+
+
Description
+

Defines the details for a experiment with total experiment count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperiments - Int! + Total number of experiments
experiments - [Experiment]! + Details related to the experiments
+
+
+
+
+
Example
+ + +
{"totalNoOfExperiments": 987, "experiments": [Experiment]}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunRequest

+
+
+
+
Description
+

Defines the details for experiment runs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ experimentRunIDs - [ID] + Array of experiment run IDs for which details will be fetched
+ experimentIDs - [ID] + Array of experiment IDs for which details will be fetched
+ pagination - Pagination + Details for fetching paginated data
+ sort - ExperimentRunSortInput + Details for fetching sorted data
+ filter - ExperimentRunFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "experimentRunIDs": [4],
+  "experimentIDs": ["4"],
+  "pagination": Pagination,
+  "sort": ExperimentRunSortInput,
+  "filter": ExperimentRunFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListExperimentRunResponse

+
+
+
+
Description
+

Defines the details of a experiment to sent as response

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfExperimentRuns - Int! + Total number of experiment runs
experimentRuns - [ExperimentRun]! + Defines details of experiment runs
+
+
+
+
+
Example
+ + +
{
+  "totalNoOfExperimentRuns": 123,
+  "experimentRuns": [ExperimentRun]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraRequest

+
+
+
+
Description
+

Defines the details for a infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraIDs - [ID!] + Array of infra IDs for which details will be fetched
+ environmentIDs - [ID!] + Environment ID
+ pagination - Pagination + Details for fetching paginated data
+ filter - InfraFilterInput + Details for fetching filtered data
+
+
+
+
+
Example
+ + +
{
+  "infraIDs": ["4"],
+  "environmentIDs": [4],
+  "pagination": Pagination,
+  "filter": InfraFilterInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ListInfraResponse

+
+
+
+
Description
+

Defines the details for a infras with total infras count

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
totalNoOfInfras - Int! + Total number of infras
infras - [Infra]! + Details related to the infras
+
+
+
+
+
Example
+ + +
{"totalNoOfInfras": 123, "infras": [Infra]}
+
+ + +
+
+
+
+
+
+ Types +
+

Maintainer

+
+
+
+
Description
+

Defines the details of the maintainer

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + Name of the maintainer
email - String! + Email of the maintainer
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Metadata

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
version - String! + +
annotations - Annotation! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "version": "abc123",
+  "annotations": Annotation
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Method

+
+
+
+
Description
+

Defines the methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
get - GET + A GET request
post - POST + A POST request
+
+
+
+
+
Example
+ + +
{"get": GET, "post": POST}
+
+ + +
+
+
+
+
+
+ Types +
+

MethodRequest

+
+
+
+
Description
+

Defines the input for methods of the probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ get - GETRequest + A GET request
+ post - POSTRequest + A POST request
+
+
+
+
+
Example
+ + +
{
+  "get": GETRequest,
+  "post": POSTRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Mode

+
+
+
+
Description
+

Defines the different modes of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

SOT

+
+
+

EOT

+
+
+

Edge

+
+
+

Continuous

+
+
+

OnChaos

+
+
+
+
+
+
+
Example
+ + +
"SOT"
+
+ + +
+
+
+
+
+
+ Types +
+

ObjectData

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
labels - [String!] + Labels present in the resource
name - String! + Name of the resource
+
+
+
+
+
Example
+ + +
{
+  "labels": ["abc123"],
+  "name": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POST

+
+
+
+
Description
+

Details of POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
contentType - String + Content Type of the request
body - String + Body of the request
bodyPath - String + Body Path of the HTTP body required for the http post request
criteria - String! + Criteria of the request
responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "abc123",
+  "body": "xyz789",
+  "bodyPath": "xyz789",
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

POSTRequest

+
+
+
+
Description
+

Details for input of the POST request

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ contentType - String + Content Type of the request
+ body - String + Body of the request
+ bodyPath - String + Body Path of the request for Body
+ criteria - String! + Criteria of the request
+ responseCode - String! + Response Code of the request
+
+
+
+
+
Example
+ + +
{
+  "contentType": "xyz789",
+  "body": "abc123",
+  "bodyPath": "xyz789",
+  "criteria": "xyz789",
+  "responseCode": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbe

+
+
+
+
Description
+

Defines the PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
probeTimeout - String! + Timeout of the Probe
interval - String! + Interval of the Probe
retry - Int + Retry interval of the Probe
attempt - Int + Attempt contains the total attempt count for the probe
probePollingInterval - String + Polling interval of the Probe
initialDelay - String + Initial delay interval of the Probe in seconds
evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
stopOnFailure - Boolean + Is stop on failure enabled in the Probe
endpoint - String! + Endpoint of the Probe
query - String + Query of the Probe
queryPath - String + Query path of the Probe
comparator - Comparator! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "xyz789",
+  "interval": "xyz789",
+  "retry": 987,
+  "attempt": 123,
+  "probePollingInterval": "xyz789",
+  "initialDelay": "abc123",
+  "evaluationTimeout": "abc123",
+  "stopOnFailure": false,
+  "endpoint": "abc123",
+  "query": "abc123",
+  "queryPath": "abc123",
+  "comparator": Comparator
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PROMProbeRequest

+
+
+
+
Description
+

Defines the input for PROM probe properties

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ probeTimeout - String! + Timeout of the Probe
+ interval - String! + Interval of the Probe
+ retry - Int + Retry interval of the Probe
+ attempt - Int + Attempt contains the total attempt count for the probe
+ probePollingInterval - String + Polling interval of the Probe
+ initialDelay - String + Initial delay interval of the Probe in seconds
+ evaluationTimeout - String + EvaluationTimeout is the timeout window in which the SLO metrics
+ stopOnFailure - Boolean + Is stop on failure enabled in the Probe
+ endpoint - String! + Endpoint of the Probe
+ query - String + Query of the Probe
+ queryPath - String + Query path of the Probe
+ comparator - ComparatorInput! + Comparator of the Probe
+
+
+
+
+
Example
+ + +
{
+  "probeTimeout": "abc123",
+  "interval": "abc123",
+  "retry": 987,
+  "attempt": 987,
+  "probePollingInterval": "abc123",
+  "initialDelay": "xyz789",
+  "evaluationTimeout": "xyz789",
+  "stopOnFailure": false,
+  "endpoint": "xyz789",
+  "query": "abc123",
+  "queryPath": "abc123",
+  "comparator": ComparatorInput
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PackageInformation

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
packageName - String! + +
experiments - [Experiments!]! + +
+
+
+
+
+
Example
+ + +
{
+  "packageName": "xyz789",
+  "experiments": [Experiments]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Pagination

+
+
+
+
Description
+

Defines data required to fetch paginated data

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ page - Int! + Page number for which data will be fetched
+ limit - Int! + Number of data to be fetched
+
+
+
+
+
Example
+ + +
{"page": 123, "limit": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLog

+
+
+
+
Description
+

Response received for querying pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - InfraIdentity! + ID of the cluster
+ requestID - ID! + Unique request ID of a particular node which is being queried
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podType - String! + Type of the pod: chaosengine
+ log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "infraID": InfraIdentity,
+  "requestID": 4,
+  "experimentRunID": 4,
+  "podName": "abc123",
+  "podType": "abc123",
+  "log": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogRequest

+
+
+
+
Description
+

Defines the details for fetching the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ infraID - ID! + ID of the cluster
+ experimentRunID - ID! + ID of a experiment run
+ podName - String! + Name of the pod for which logs are required
+ podNamespace - String! + Namespace where the pod is running
+ podType - String! + Type of the pod: chaosEngine or not pod
+ expPod - String + Name of the experiment pod fetched from execution data
+ runnerPod - String + Name of the runner pod fetched from execution data
+ chaosNamespace - String + Namespace where the experiment is executing
+
+
+
+
+
Example
+ + +
{
+  "infraID": 4,
+  "experimentRunID": 4,
+  "podName": "xyz789",
+  "podNamespace": "xyz789",
+  "podType": "abc123",
+  "expPod": "xyz789",
+  "runnerPod": "xyz789",
+  "chaosNamespace": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PodLogResponse

+
+
+
+
Description
+

Defines the response received for querying querying the pod logs

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
podName - String! + Name of the pod for which logs are queried
podType - String! + Type of the pod: chaosengine
log - String! + Logs for the pod
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "podName": "abc123",
+  "podType": "abc123",
+  "log": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

PredefinedExperimentList

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentName - String! + Name of the experiment
experimentCSV - String! + Experiment CSV
experimentManifest - String! + Experiment Manifest
+
+
+
+
+
Example
+ + +
{
+  "experimentName": "abc123",
+  "experimentCSV": "abc123",
+  "experimentManifest": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Probe

+
+
+
+
Description
+

Defines the details of the Probe entity

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
projectID - ID! + Harness identifiers
name - String! + Name of the Probe
description - String + Description of the Probe
tags - [String!] + Tags of the Probe
type - ProbeType! + Type of the Probe [From list of ProbeType enum]
infrastructureType - InfrastructureType! + Infrastructure type of the Probe
kubernetesHTTPProperties - KubernetesHTTPProbe + Kubernetes HTTP Properties of the specific type of the Probe
kubernetesCMDProperties - KubernetesCMDProbe + Kubernetes CMD Properties of the specific type of the Probe
k8sProperties - K8SProbe + K8S Properties of the specific type of the Probe
promProperties - PROMProbe + PROM Properties of the specific type of the Probe
recentExecutions - [ProbeRecentExecutions!] + All execution histories of the probe
referencedBy - Int + Referenced by how many faults
updatedAt - String! + Timestamp at which the Probe was last updated
createdAt - String! + Timestamp at which the Probe was created
updatedBy - UserDetails + User who has updated the Probe
createdBy - UserDetails + User who has created the Probe
+
+
+
+
+
Example
+ + +
{
+  "projectID": "4",
+  "name": "xyz789",
+  "description": "abc123",
+  "tags": ["xyz789"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbe,
+  "kubernetesCMDProperties": KubernetesCMDProbe,
+  "k8sProperties": K8SProbe,
+  "promProperties": PROMProbe,
+  "recentExecutions": [ProbeRecentExecutions],
+  "referencedBy": 987,
+  "updatedAt": "xyz789",
+  "createdAt": "xyz789",
+  "updatedBy": UserDetails,
+  "createdBy": UserDetails
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeFilterInput

+
+
+
+
Description
+

Defines the input for Probe filter

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String + Name of the Probe
+ dateRange - DateRange + Date range for filtering purpose
+ type - [ProbeType] + Type of the Probe [From list of ProbeType enum]
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "dateRange": DateRange,
+  "type": ["httpProbe"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of global probe in ListProbe API with different fault and execution history each time

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
status - Status! + Fault Status
executedByExperiment - ExecutedByExperiment! + Fault executed by which experiment
+
+
+
+
+
Example
+ + +
{
+  "faultName": "xyz789",
+  "status": Status,
+  "executedByExperiment": ExecutedByExperiment
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeRequest

+
+
+
+
Description
+

Defines the details required for creating a Chaos Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - ID! + Name of the Probe
+ description - String + Description of the Probe
+ tags - [String!] + Tags of the Probe
+ type - ProbeType! + Type of the Probe [From list of ProbeType enum]
+ infrastructureType - InfrastructureType! + Infrastructure type of the Probe
+ kubernetesHTTPProperties - KubernetesHTTPProbeRequest + HTTP Properties of the specific type of the Probe
+ kubernetesCMDProperties - KubernetesCMDProbeRequest + CMD Properties of the specific type of the Probe
+ k8sProperties - K8SProbeRequest + K8S Properties of the specific type of the Probe
+ promProperties - PROMProbeRequest + PROM Properties of the specific type of the Probe
+
+
+
+
+
Example
+ + +
{
+  "name": "4",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "type": "httpProbe",
+  "infrastructureType": "Kubernetes",
+  "kubernetesHTTPProperties": KubernetesHTTPProbeRequest,
+  "kubernetesCMDProperties": KubernetesCMDProbeRequest,
+  "k8sProperties": K8SProbeRequest,
+  "promProperties": PROMProbeRequest
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeType

+
+
+
+
Description
+

Defines the different types of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

httpProbe

+
+
+

cmdProbe

+
+
+

promProbe

+
+
+

k8sProbe

+
+
+
+
+
+
+
Example
+ + +
"httpProbe"
+
+ + +
+
+
+
+
+
+ Types +
+

ProbeVerdict

+
+
+
+
Description
+

Defines the older different statuses of Probes

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

Passed

+
+
+

Failed

+
+
+

NA

+
+
+

Awaited

+
+
+
+
+
+
+
Example
+ + +
"Passed"
+
+ + +
+
+
+
+
+
+ Types +
+

Provider

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
name - String! + +
+
+
+
+
+
Example
+ + +
{"name": "xyz789"}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExecutions

+
+
+
+
Description
+

Defines the Recent Executions of experiment referenced by the Probe

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Fault name
mode - Mode! + Probe mode
executionHistory - [ExecutionHistory!]! + Execution History
+
+
+
+
+
Example
+ + +
{
+  "faultName": "xyz789",
+  "mode": "SOT",
+  "executionHistory": [ExecutionHistory]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RecentExperimentRun

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
experimentRunID - ID! + ID of the experiment run which is to be queried
phase - String! + Phase of the experiment run
resiliencyScore - Float + Resiliency score of the experiment
updatedAt - String! + Timestamp when the experiment was last updated
createdAt - String! + Timestamp when the experiment was created
createdBy - UserDetails + User who created the experiment run
updatedBy - UserDetails + User who updated the experiment run
runSequence - Int! + runSequence is the sequence number of experiment run
+
+
+
+
+
Example
+ + +
{
+  "experimentRunID": "4",
+  "phase": "xyz789",
+  "resiliencyScore": 123.45,
+  "updatedAt": "abc123",
+  "createdAt": "abc123",
+  "createdBy": UserDetails,
+  "updatedBy": UserDetails,
+  "runSequence": 123
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraRequest

+
+
+
+
Description
+

Defines the details for the new infra being connected

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + Name of the infra
+ environmentID - String! + Environment ID for the infra
+ infrastructureType - InfrastructureType! + Type of Infra : internal/external
+ description - String + Description of the infra
+ platformName - String! + Infra Platform Name eg. GKE,AWS, Others
+ infraNamespace - String + Namespace where the infra is being installed
+ serviceAccount - String + Name of service account used by infra
+ infraScope - String! + Scope of the infra : ns or infra
+ infraNsExists - Boolean + Bool value indicating whether infra ns used already exists on infra or not
+ infraSaExists - Boolean + Bool value indicating whether service account used already exists on infra or not
+ skipSsl - Boolean + Bool value indicating whether infra will skip ssl checks or not
+ nodeSelector - String + Node selectors used by infra
+ tolerations - [Toleration] + Node tolerations used by infra
+ tags - [String!] + Tags of the infra
+
+
+
+
+
Example
+ + +
{
+  "name": "abc123",
+  "environmentID": "xyz789",
+  "infrastructureType": "Kubernetes",
+  "description": "abc123",
+  "platformName": "xyz789",
+  "infraNamespace": "abc123",
+  "serviceAccount": "xyz789",
+  "infraScope": "abc123",
+  "infraNsExists": false,
+  "infraSaExists": true,
+  "skipSsl": true,
+  "nodeSelector": "xyz789",
+  "tolerations": [Toleration],
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RegisterInfraResponse

+
+
+
+
Description
+

Response received for registering a new infra

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
token - String! + Token used to verify and retrieve the infra manifest
infraID - String! + Unique ID for the newly registered infra
name - String! + Infra name as sent in request
manifest - String! + Infra Manifest
+
+
+
+
+
Example
+ + +
{
+  "token": "xyz789",
+  "infraID": "xyz789",
+  "name": "abc123",
+  "manifest": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ResilienceScoreCategory

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
id - Int! + Lower bound of the range(inclusive)
count - Int! + total experiments with avg resilience score between lower bound and upper bound(exclusive)
+
+
+
+
+
Example
+ + +
{"id": 987, "count": 987}
+
+ + +
+
+
+
+
+
+ Types +
+

ResourceDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
name - String! + +
description - String + +
tags - [String!] + +
+
+
+
Possible Types
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourceDetails Types
+

Experiment

+
+

Infra

+
+

ChaosHub

+
+

ChaosHubStatus

+
+

Environment

+
+

Probe

+
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

RunChaosExperimentResponse

+
+
+
+
Fields
+ + + + + + + + + + + + + +
Field NameDescription
notifyID - ID! + +
+
+
+
+
+
Example
+ + +
{"notifyID": 4}
+
+ + +
+
+
+
+
+
+ Types +
+

SSHKey

+
+
+
+
Description
+

Defines the SSHKey details

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
publicKey - String! + Public SSH key authenticating into git repository
privateKey - String! + Private SSH key authenticating into git repository
+
+
+
+
+
Example
+ + +
{
+  "publicKey": "xyz789",
+  "privateKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

SaveChaosExperimentRequest

+
+
+
+
Description
+

Defines the details for a chaos experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the experiment
+ type - ExperimentType + Type of the experiment
+ name - String! + Name of the experiment
+ description - String! + Description of the experiment
+ manifest - String! + Manifest of the experiment
+ infraID - ID! + ID of the target infrastructure in which the experiment will run
+ tags - [String!] + Tags of the infrastructure
+
+
+
+
+
Example
+ + +
{
+  "id": "xyz789",
+  "type": "All",
+  "name": "xyz789",
+  "description": "xyz789",
+  "manifest": "xyz789",
+  "infraID": "4",
+  "tags": ["abc123"]
+}
+
+ + +
+
+
+
+
+
+ Types +
+

ScheduleType

+
+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

CRON

+
+
+

NON_CRON

+
+
+

ALL

+
+
+
+
+
+
+
Example
+ + +
"CRON"
+
+ + +
+
+
+
+
+
+ Types +
+

ServerVersionResponse

+
+
+
+
Description
+

Response received for fetching GQL server version

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
key - String! + Returns server version key
value - String! + Returns server version value
+
+
+
+
+
Example
+ + +
{
+  "key": "xyz789",
+  "value": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Spec

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
displayName - String! + +
categoryDescription - String! + +
keywords - [String!]! + +
maturity - String! + +
maintainers - [Maintainer!]! + +
minKubeVersion - String! + +
provider - Provider! + +
links - [Link!]! + +
faults - [FaultList!]! + +
experiments - [String!] + +
chaosExpCRDLink - String! + +
platforms - [String!]! + +
chaosType - String + +
+
+
+
+
+
Example
+ + +
{
+  "displayName": "abc123",
+  "categoryDescription": "abc123",
+  "keywords": ["xyz789"],
+  "maturity": "abc123",
+  "maintainers": [Maintainer],
+  "minKubeVersion": "xyz789",
+  "provider": Provider,
+  "links": [Link],
+  "faults": [FaultList],
+  "experiments": ["xyz789"],
+  "chaosExpCRDLink": "abc123",
+  "platforms": ["abc123"],
+  "chaosType": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Status

+
+
+
+
Description
+

Status defines whether a probe is pass or fail

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
verdict - ProbeVerdict! + Verdict defines the verdict of the probe, range: Passed, Failed, N/A
description - String + Description defines the description of probe status
+
+
+
+
+
Example
+ + +
{
+  "verdict": "Passed",
+  "description": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

String

+
+
+
+
Description
+

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

+
+
+
+
+
Example
+ + +
"xyz789"
+
+ + +
+
+
+
+
+
+ Types +
+

Toleration

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ tolerationSeconds - Int + +
+ key - String + +
+ operator - String + +
+ effect - String + +
+ value - String + +
+
+
+
+
+
Example
+ + +
{
+  "tolerationSeconds": 987,
+  "key": "abc123",
+  "operator": "xyz789",
+  "effect": "abc123",
+  "value": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateChaosHubRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ id - String! + ID of the chaos hub
+ name - String! + Name of the chaos hub
+ description - String + Description of the infra
+ tags - [String!] + Tags of the infra
+ repoURL - String! + URL of the git repository
+ repoBranch - String! + Branch of the git repository
+ isPrivate - Boolean! + Bool value indicating whether the hub is private or not.
+ authType - AuthType! + Type of authentication used: BASIC, SSH, TOKEN
+ token - String + Token for authentication of private chaos hub
+ userName - String + Git username
+ password - String + Git password
+ sshPrivateKey - String + Private SSH key for authenticating into private chaos hub
+ sshPublicKey - String + Public SSH key for authenticating into private chaos hub
+
+
+
+
+
Example
+ + +
{
+  "id": "xyz789",
+  "name": "xyz789",
+  "description": "abc123",
+  "tags": ["abc123"],
+  "repoURL": "xyz789",
+  "repoBranch": "xyz789",
+  "isPrivate": true,
+  "authType": "BASIC",
+  "token": "xyz789",
+  "userName": "xyz789",
+  "password": "xyz789",
+  "sshPrivateKey": "xyz789",
+  "sshPublicKey": "xyz789"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateEnvironmentRequest

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ environmentID - String! + +
+ name - String + +
+ description - String + +
+ tags - [String] + +
+ type - EnvironmentType + +
+
+
+
+
+
Example
+ + +
{
+  "environmentID": "abc123",
+  "name": "xyz789",
+  "description": "xyz789",
+  "tags": ["abc123"],
+  "type": "PROD"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

UpdateStatus

+
+
+
+
Description
+

UpdateStatus represents if infra needs to be updated

+
+
+
Values
+ + + + + + + + + + + + + + + + + + + + + +
Enum ValueDescription
+

AVAILABLE

+
+
+

MANDATORY

+
+
+

NOT_REQUIRED

+
+
+
+
+
+
+
Example
+ + +
"AVAILABLE"
+
+ + +
+
+
+
+
+
+ Types +
+

UserDetails

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Field NameDescription
userID - String! + +
username - String! + +
email - String! + +
+
+
+
+
+
Example
+ + +
{
+  "userID": "xyz789",
+  "username": "xyz789",
+  "email": "abc123"
+}
+
+ + +
+
+
+
+
+
+ Types +
+

Weightages

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Field NameDescription
faultName - String! + Name of the fault
weightage - Int! + Weightage of the experiment
+
+
+
+
+
Example
+ + +
{"faultName": "abc123", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

WeightagesInput

+
+
+
+
Description
+

Defines the details of the weightages of each chaos fault in the experiment

+
+
+
Fields
+ + + + + + + + + + + + + + + + + +
Input FieldDescription
+ faultName - String! + Name of the fault
+ weightage - Int! + Weightage of the fault
+
+
+
+
+
Example
+ + +
{"faultName": "abc123", "weightage": 123}
+
+ + +
+
+
+
+
+
+ Types +
+

Workload

+
+
+
+
Fields
+ + + + + + + + + + + + + + + + + + + + + +
Input FieldDescription
+ name - String! + +
+ kind - String! + +
+ namespace - String! + +
+
+
+
+
+
Example
+ + +
{
+  "name": "xyz789",
+  "kind": "xyz789",
+  "namespace": "xyz789"
+}
+
+ + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.9.0/config.yml b/mkdocs/docs/graphql/v3.9.0/config.yml new file mode 100644 index 00000000000..c0689b65d0f --- /dev/null +++ b/mkdocs/docs/graphql/v3.9.0/config.yml @@ -0,0 +1,33 @@ +spectaql: + targetDir: ./mkdocs/docs/graphql/v3.9.0 + logoFile: ./mkdocs/docs/graphql/logo.png + faviconFile: ./mkdocs/docs/graphql/logo.png + displayAllServers: true + themeDir: ./mkdocs/docs/graphql/v3.9.0/custom-theme + +introspection: + removeTrailingPeriodFromDescriptions: false + schemaFile: ./chaoscenter/graphql/definitions/shared/*.graphqls + queryNameStrategy: capitalizeFirst + fieldExpansionDepth: 2 + + spectaqlDirective: + enable: true + +extensions: + graphqlScalarExamples: true + +info: + title: ChaosCenter API Documentation + description: Litmus Portal provides console and UI experience for managing, monitoring, and events around chaos workflows. Chaos workflows consist of a sequence of experiments run together to achieve the objective of introducing some kind of fault into an application or the Kubernetes platform. + + x-introItems: + - title: Common Error Response + file: ./mkdocs/docs/graphql/v3.9.0/error_response_guide.md + +servers: + - url: http://localhost:8080 + description: Dev + - url: http://localhost:8080/query + description: Prod + production: true diff --git a/mkdocs/docs/graphql/v3.9.0/custom-theme/stylesheets/custom.scss b/mkdocs/docs/graphql/v3.9.0/custom-theme/stylesheets/custom.scss new file mode 100644 index 00000000000..68e1aa2268c --- /dev/null +++ b/mkdocs/docs/graphql/v3.9.0/custom-theme/stylesheets/custom.scss @@ -0,0 +1,24 @@ + +$line-height-heading: 1.2; +$font-size-large-heading: 1.7105263158rem; +$font-weight-large-heading: 700; +$content-padding: 20px; +$text-color: #535b60; +$text-weight: 400; +$text-size: 1.5789473684rem; + +#spectaql { + h2 { + color: $text-color; + font-weight: $text-weight; + font-size: $text-size; + } + + .doc-heading { + line-height: $line-height-heading; + font-size: $font-size-large-heading; + font-weight: $font-weight-large-heading; + color: #535b60 + } + +} \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.9.0/error_response_guide.md b/mkdocs/docs/graphql/v3.9.0/error_response_guide.md new file mode 100644 index 00000000000..76e4ab30fce --- /dev/null +++ b/mkdocs/docs/graphql/v3.9.0/error_response_guide.md @@ -0,0 +1,29 @@ +All error responses follow the structure outlined below. + +```json +{ + "errors": [ + { + "message": "Error message", + "path": [ + "Request path" + ] + } + ], + "data": {} +} +``` + +### Field Descriptions: +- **errors**:
+ An array of error objects. Multiple errors can occur, and each error contains a message and a path field.
+ **Type: `Array`**

+ - **message**:
+ A description of the error.
+ **Type: `String`**

+ - **path**:
+ Indicates the GraphQL or API operation path where the error occurred. It helps in identifying which operation or resolver triggered the error.
+ **Type: `Array of Strings`**

+- **data**:
+ This field contains the data returned from the request. In the event of an error, the field corresponding to the failed operation will be null, while other successful operations (if any) will still return valid data.
+ **Type: `Object`**
diff --git a/mkdocs/docs/graphql/v3.9.0/images/favicon.png b/mkdocs/docs/graphql/v3.9.0/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.9.0/images/logo.png b/mkdocs/docs/graphql/v3.9.0/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db508c437e3effaa5f2eb4eb5fe69aab17fe4ac2 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^PCy*Q!3HEBG%*zeDb50qNFdEE48n{Iv*t(u1sRKj z+?^QKos)S999J<0;$0;y%O6He{ z&YIQVLnDs{e~DNZcJ_1nUP=FF?_Zl8zi2KQzxZLoe!HBwX;+Q(Uv*#9zx=ek^jGzy z+2zN+&ktYPb-KrgTe~DWM4f DF8rMq literal 0 HcmV?d00001 diff --git a/mkdocs/docs/graphql/v3.9.0/javascripts/spectaql.min.js b/mkdocs/docs/graphql/v3.9.0/javascripts/spectaql.min.js new file mode 100644 index 00000000000..6ef3202c222 --- /dev/null +++ b/mkdocs/docs/graphql/v3.9.0/javascripts/spectaql.min.js @@ -0,0 +1 @@ +function scrollSpy(){var l=5,e=document.querySelector("html"),c=(e&&(e=window.getComputedStyle(e).scrollPaddingTop)&&"string"==typeof e&&"auto"!==e&&e.endsWith("px")&&(l+=parseInt(e.split("px")[0])),"nav-scroll-active"),i=null,d=[];function t(){i=null;var e=document.querySelectorAll("[data-traverse-target]");Array.prototype.forEach.call(e,function(e){d.push({id:e.id,top:e.offsetTop})})}var n=debounce(function(){t(),o()},500),o=debounce(function(){var e,t,n,o,r=(e=>{for(var t=e+l,n=0;n=d[n].top&&(!o||t{toggleMenu(),scrollSpy()}); \ No newline at end of file diff --git a/mkdocs/docs/graphql/v3.9.0/stylesheets/spectaql.min.css b/mkdocs/docs/graphql/v3.9.0/stylesheets/spectaql.min.css new file mode 100644 index 00000000000..e7666ab6b36 --- /dev/null +++ b/mkdocs/docs/graphql/v3.9.0/stylesheets/spectaql.min.css @@ -0,0 +1 @@ +#spectaql h2{color:#535b60;font-weight:400;font-size:1.5789473684rem}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;font-weight:700;color:#535b60}#spectaql{padding:0;margin:0}#spectaql pre{overflow:auto;margin-top:0;margin-bottom:20px}#spectaql pre code{display:block;background:#ccc}#spectaql table{width:100%;table-layout:fixed;text-align:left;border-collapse:collapse}#spectaql table td,#spectaql table th{margin:0;padding:0}#spectaql #introduction .example-section>*,#spectaql .definition-heading,#spectaql .doc-heading,#spectaql .introduction-item-title,#spectaql .operation-heading{overflow:hidden;text-overflow:ellipsis}#spectaql #page{display:flex}#spectaql #page *{box-sizing:border-box}#spectaql #page.drawer-open #sidebar{z-index:1000;transform:translateX(0)}#spectaql #page.drawer-open .drawer-overlay{display:block;background:rgba(0,0,0,.5);z-index:10}#spectaql #sidebar{position:fixed;min-width:250px;max-width:250px;flex-shrink:0;transition:transform .2s ease-out;transform:translateX(-100%);z-index:10;padding-top:20px;background:#fff}@media (min-width:48em){#spectaql #sidebar{position:relative;transform:none}}@media (min-width:64em){#spectaql #sidebar{min-width:300px;max-width:300px}}#spectaql .sidebar-top-container{display:flex;align-items:center;padding:0 20px}#spectaql #mobile-navbar{display:flex;align-items:center;position:sticky;top:0}@media (min-width:48em){#spectaql #mobile-navbar{display:none}}#spectaql .sidebar-open-button{display:flex;align-items:flex-start;margin:0;padding:0;border:none;background:0 0}#spectaql .sidebar-open-button .hamburger{width:16px;height:14px;cursor:pointer}#spectaql .sidebar-open-button .hamburger::after{display:block;content:"";height:2px;background:#535b60;box-shadow:0 5px 0 #535b60,0 10px 0 #535b60}#spectaql .sidebar-open-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .close-button{display:block}#spectaql .close-button .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width:48em){#spectaql .close-button{display:none}}#spectaql .drawer-overlay{display:none;position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0)}@media (min-width:48em){#spectaql .drawer-overlay{display:none!important}}#spectaql #nav{display:flex;flex-direction:column;max-height:calc(100vh - 0px);padding:0 20px;padding-bottom:20px;position:sticky;top:0;overflow:auto}#spectaql #logo{margin-right:auto}#spectaql #logo img{display:block;width:100%;max-width:100%}#spectaql .nav-group-items,#spectaql .nav-group-section-items{padding:0;margin:0}#spectaql .nav-group-items>li,#spectaql .nav-group-section-items>li{list-style:none}#spectaql .nav-group-items .nav-group-section-title,#spectaql .nav-group-items>li,#spectaql .nav-group-section-items .nav-group-section-title,#spectaql .nav-group-section-items>li{overflow:hidden;text-overflow:ellipsis}#spectaql .nav-group-section-items{display:none}#spectaql .nav-scroll-expand .nav-group-section-items{display:block}#spectaql #docs{position:relative;margin:0 auto;min-width:100px;max-width:88em;flex-grow:1;flex-shrink:1;padding:20px}@media (min-width:48em){#spectaql .doc-row{display:flex;flex-wrap:wrap}}#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:100%}@media (min-width:48em){#spectaql .doc-row .doc-copy,#spectaql .doc-row .doc-examples{width:50%}}@media (min-width:48em){#spectaql .doc-row .doc-copy{padding-right:20px}}@media (min-width:48em){#spectaql .doc-row .doc-examples{padding-left:20px}}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e}#spectaql{font-family:-apple-system,BlinkMacSystemFont,system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.6;background:#fff;color:#535b60}@media (min-width:32em){#spectaql{font-size:16px}}#spectaql a{color:#0298bf;text-decoration:none}#spectaql a:hover{color:#0182a2}#spectaql a:active,#spectaql a:focus{color:#0298bf}#spectaql code{font-size:.875em;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}#spectaql pre{color:#fff}#spectaql pre code{background:#222}#spectaql pre code,#spectaql pre code.hljs{font-size:.82em;line-height:1.4;padding:15px 20px}#spectaql .doc-heading{line-height:1.2;font-size:1.7105263158rem;margin-top:10px}@media (min-width:48em){#spectaql .doc-heading{margin-top:-10px}}#spectaql .close-button{background:0 0;border:none;padding:5px;font-size:16px;font-weight:700;color:#535b60}#spectaql #introduction{margin-bottom:60px}#spectaql #introduction .example-section:not(.example-section-is-code){margin-bottom:20px}#spectaql #introduction .example-section:not(.example-section-is-code) h5,#spectaql #introduction .example-section:not(.example-section-is-code) p{margin:0;font-size:1em}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:20px;padding-bottom:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:30px;padding-bottom:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #sidebar{padding-top:40px;padding-bottom:40px}}#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:20px;padding-right:20px}@media (min-width:32em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:30px;padding-right:30px}}@media (min-width:48em){#spectaql #docs,#spectaql #mobile-navbar,#spectaql #nav,#spectaql .sidebar-top-container{padding-left:50px;padding-right:50px}}#spectaql #sidebar{padding-bottom:0;background:#fff}#spectaql #sidebar a{color:#535b60}#spectaql #sidebar a.nav-scroll-active,#spectaql #sidebar a:hover{font-weight:700}#spectaql #sidebar a.nav-scroll-active{color:#535b60}#spectaql #sidebar a:hover{color:#0182a2}@media (min-width:48em){#spectaql #sidebar{border-right:2px solid #d8d8d8}}#spectaql #mobile-navbar{background:#fff;margin-top:-20px;margin-left:-20px;margin-right:-20px}@media (min-width:32em){#spectaql #mobile-navbar{margin-top:-30px;margin-left:-30px;margin-right:-30px}}#spectaql #mobile-navbar .sidebar-open-button::after{display:block;content:"All Topics";margin-left:10px;color:#535b60}#spectaql #nav .nav-group{margin-top:20px}#spectaql #nav .nav-group li{margin-bottom:5px}#spectaql #nav .nav-group-title{font-size:.875em;font-weight:400;margin:0 0 6px 0;color:#999}#spectaql #nav .nav-group-section-title{font-size:inherit;margin:0;margin-bottom:5px;font-weight:400}#spectaql #nav .nav-group-section-items{margin-left:.75em}#spectaql .definition,#spectaql .operation{margin-bottom:60px}#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.72em}#spectaql .definition .definition-heading code,#spectaql .definition .operation-heading code,#spectaql .operation .definition-heading code,#spectaql .operation .operation-heading code{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:32em){#spectaql .definition .definition-heading,#spectaql .definition .operation-heading,#spectaql .operation .definition-heading,#spectaql .operation .operation-heading{font-size:1.7105263158rem}}#spectaql .definition-group-name,#spectaql .group-heading,#spectaql .operation-group-name{border-top:2px solid #d8d8d8;padding-top:3px;color:#999;font-size:inherit;font-weight:inherit}#spectaql .definition-group-name a,#spectaql .group-heading a,#spectaql .operation-group-name a{color:#999}#spectaql .definition-group-name a:hover,#spectaql .group-heading a:hover,#spectaql .operation-group-name a:hover{font-weight:700}#spectaql .doc-examples{margin-top:20px}#spectaql .doc-examples .example-heading{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .doc-examples .example-section-is-code h5{color:#999;text-transform:uppercase;background:#000;font-size:.75em;font-weight:700;padding:.6em 0 .6em 20px;margin:0;opacity:1}@media (min-width:48em){#spectaql .doc-examples{margin-top:0}}#spectaql .doc-copy p{margin:0 0 20px 0}#spectaql .doc-copy p:last-child{margin-bottom:0}#spectaql .doc-copy table tr th{font-weight:400;border-bottom:2px solid #d8d8d8}#spectaql .doc-copy table tr td{border-bottom:1px solid #e0e0e0}#spectaql .doc-copy table tr.row-has-field-arguments td,#spectaql .doc-copy table tr:last-child td{border-bottom:none}#spectaql .doc-copy table tr td,#spectaql .doc-copy table tr th{padding:5px}#spectaql .doc-copy table tr td:first-child,#spectaql .doc-copy table tr th:first-child{padding-left:0}#spectaql .doc-copy table tr td:last-child,#spectaql .doc-copy table tr th:last-child{padding-right:0}#spectaql .doc-copy .doc-copy-section{margin-bottom:30px}#spectaql .doc-copy .doc-copy-section>h5{margin:0 0 5px 0;font-size:inherit;font-weight:inherit;color:#999}#spectaql .doc-copy .definition-description>h5,#spectaql .doc-copy .definition-properties>h5,#spectaql .doc-copy .operation-description>h5{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#spectaql .field-arguments{font-size:.875em;background-color:#fafbfc;border:1px solid #e0e0e0;padding:10px;margin-bottom:5px}#spectaql .field-arguments p{margin:10px 0 0 0}#spectaql .field-arguments h5.field-arguments-heading{margin:0;padding:0 0 10px 0;font-weight:inherit;color:#999}#spectaql .field-arguments .field-argument{border-top:1px #e0e0e0 solid;padding:10px 0}#spectaql .field-arguments .field-argument:last-child{padding-bottom:0}#spectaql .field-arguments .field-argument-name{margin:0;font-size:inherit;font-weight:inherit}#spectaql .deprecation-reason{word-break:break-word}#spectaql .deprecation-reason::before{display:inline;content:"Deprecated";padding:2px 5px;margin-right:5px;background:#fed7d8;color:#c60609;font-weight:700;font-size:.875em} \ No newline at end of file From 8902dfbedcffab4392351ab202f1545e9d4da923 Mon Sep 17 00:00:00 2001 From: Namkyu Park <53862866+namkyu1999@users.noreply.github.com> Date: Fri, 22 Nov 2024 16:22:56 +0900 Subject: [PATCH 10/14] Proposal: Distributed tracing for chaos experiments (#4684) * proposal: Distributed tracing for chaos experiments Signed-off-by: namkyu1999 * feat: add reference Signed-off-by: namkyu1999 * feat: add implementation PRs tab Signed-off-by: namkyu1999 * update: add a new pr Signed-off-by: namkyu1999 * fix: add a link Signed-off-by: namkyu1999 --------- Signed-off-by: namkyu1999 Co-authored-by: Saranya Jena --- ...stributed-tracing-for-chaos-experiments.md | 105 ++++++++++++++++++ .../images/distributed-tracing-demo-arch.png | Bin 0 -> 50288 bytes .../images/distributed-tracing-example.png | Bin 0 -> 17717 bytes 3 files changed, 105 insertions(+) create mode 100644 proposals/distributed-tracing-for-chaos-experiments.md create mode 100644 proposals/images/distributed-tracing-demo-arch.png create mode 100644 proposals/images/distributed-tracing-example.png diff --git a/proposals/distributed-tracing-for-chaos-experiments.md b/proposals/distributed-tracing-for-chaos-experiments.md new file mode 100644 index 00000000000..cfb0c8c5e0c --- /dev/null +++ b/proposals/distributed-tracing-for-chaos-experiments.md @@ -0,0 +1,105 @@ +| title | authors | creation-date | last-updated | +|-------------------------------------------|----------------------------------------------|---------------|--------------| +| Distributed tracing for chaos experiments | [@namkyu1999](https://github.com/namkyu1999) | 2024-06-01 | 2024-06-01 | + +# Distributed tracing for chaos experiments + +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) + - [Use Cases](#use-cases) + - [Implementation Details](#implementation-details) +- [Risks and Mitigations](#risks-and-mitigations) +- [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) +- [Drawbacks](#drawbacks) +- [Alternatives](#alternatives) +- [References](#references) +- [Implementation PRs](#implementation-prs) + +## Summary + +This proposal suggests adopting open telemetry sdk into `chaos-operator` and `chaos-runner` for measuring(tracing) the performance of chaos experiments. + +## Motivation + +The phrase `You can't manage what you don't measure` gives an idea to our project. We offer [monitoring metrics](https://github.com/litmuschaos/litmus/tree/master/monitoring) by exposing `/metrics` endpoint. However, it is not enough to measure the performance of chaos experiments. We need to trace the performance of chaos experiments. There are so many pods(ex. argo, probes, runner ...) are running and completing in a single chaos experiment. We don't know which pod is causing the performance issue so that it is hard to trace the performance of chaos experiments. Distributed tracing helps pinpoint where failures occur and what causes poor performance. It is a key tool for debugging and understanding complex systems. + +I was also inspired by [Tekton](https://tekton.dev/)'s [distributed tracing proposal](https://github.com/tektoncd/community/blob/main/teps/0124-distributed-tracing-for-tasks-and-pipelines.md). + +### Goals + +- Adopt open telemetry sdk into chaos-operator, chaos-runner, and all components running for chaos experiment. +- Implementation of opentelemetry tracing with Jaeger. +- Able to visualize chaos experiment steps in jaeger +- Add documentation to /monitoring and litmus docs. + +### Non-Goals + +- Not changing the existing chaos-experiment structure. +- Not changing the existing monitoring metrics. +- Not changing the existing API. + +## Proposal + +### Use Cases + +#### Use case 1 - LitmusChaos user + +As a user, I want to know what is happening in the chaos experiment so that I can trace the performance of chaos experiments. + +#### Use case 2 - OSS Developer + +As a developer, I want to know where the performance issue is happening in the chaos experiment so that I can debug and fix the issue. + +### Implementation Details + +I plan to use open telemetry SDK. But I need to consider the following points. + +In general distributed tracing, All the components are communicate via HTTP or gRPC. So they add trace context to the [request header](https://opentelemetry.io/docs/concepts/context-propagation/). But in chaos experiments, we are using the Kubernetes API to create resources. So we need to pass the trace context other than the request header. + +I made a simple demo to show how to pass the trace context to the child container using env. Here is the [demo](https://github.com/namkyu1999/async-trace). + +![demo-arch](./images/distributed-tracing-demo-arch.png) + +In this demo, there are two containers. The first container is a parent container and the second container is a child container created by the parent container using the docker client API. When the child container is created, the parent container passes the trace context to the environment variable. The child container reads the trace context from the environment variable and sends the trace context to the Jaeger. Two containers sending each trace context using OpenTelemetry SDK. And open telemetry consider two trace context as a single trace. + +So I will use the same approach in the chaos experiment. I will pass the trace context to the child container using the environment variable. And I will use the OpenTelemetry SDK to send the trace context to the Opentelemtry Collector. + +Here's a implementation plan. +- Add OpenTelemetry SDK to chaos-operator. +- Add OpenTelemetry SDK to all components running for chaos experiment. +- Send the trace context to the Opentelemetry Collector. +- Visualize the chaos experiment steps in Jaeger. +- Add documentation to /monitoring and litmus docs. + +After the implementation, the chaos experiment steps will be visualized in Jaeger like this. + +![result-example](./images/distributed-tracing-example.png) + +The API remains unchanged. Enabling tracing is entirely optional for the end user. If tracing is disabled or not configured with the correct tracing backend URL, the reconcilers will function as usual. Therefore, we can categorize this as a non-breaking change. + +## Risks and Mitigations + +Because the OpenTelemetry SDK performs additional tasks, it can cause latency. So end user can disable the tracing feature. + +## Upgrade / Downgrade Strategy + +## Drawbacks + +## Alternatives + +## References +- [Environment Variables as Carrier for Inter-Process Propagation to transport context](https://github.com/open-telemetry/opentelemetry-specification/issues/740) +- [Tekton's distributed tracing proposal](https://github.com/tektoncd/community/blob/main/teps/0124-distributed-tracing-for-tasks-and-pipelines.md) +- [noop tracer](https://github.com/open-telemetry/opentelemetry-go/discussions/2659) + +## Implementation PRs + +| isMerged | PR | +|----------|--------------------------------------------------------------------------| +| N | [chaos-runner](https://github.com/litmuschaos/chaos-runner/pull/221) | +| N | [chaos-operator](https://github.com/litmuschaos/chaos-operator/pull/498) | +| N | [litmus-go](https://github.com/litmuschaos/litmus-go/pull/706) | +| N | [chaos center](https://github.com/litmuschaos/litmus/pull/4746) | \ No newline at end of file diff --git a/proposals/images/distributed-tracing-demo-arch.png b/proposals/images/distributed-tracing-demo-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..390a1ae780b6302a9b955ae4a9cd24ad39031e91 GIT binary patch literal 50288 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 W_~A_kdN@=Eg}I}8`|~X$@BamCiMVzE literal 0 HcmV?d00001 diff --git a/proposals/images/distributed-tracing-example.png b/proposals/images/distributed-tracing-example.png new file mode 100644 index 0000000000000000000000000000000000000000..77e34ed2cc395d4635ef29204f4849d1e668aa2e GIT binary patch literal 17717 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 literal 0 HcmV?d00001 From 14c980830238babe5443bffababc73fbab5a67e1 Mon Sep 17 00:00:00 2001 From: sukkyun hong <38815540+sukkyun2@users.noreply.github.com> Date: Fri, 22 Nov 2024 16:34:11 +0900 Subject: [PATCH 11/14] Add operator interface for Probe pkg (#4849) * refactor: add operator interface for Probe pkg - Add probeOperator to probe pkg - Add probeOperator to handler that uses probeUtils - Add probe operator as parameter to functions that use probe operations in probeUtils Signed-off-by: sukkyun2 * test: add operator to handlers that use probeUtils Signed-off-by: sukkyun2 * fix: reorder golang Imports - Apply goimports Signed-off-by: sukkyun2 * test: add probeOperator to unit tests Signed-off-by: sukkyun2 * refactor: move GenerateProbeManifest logic into ProbeService - Updated handler to call GenerateExperimentManifestWithProbes, GenerateCronExperimentManifestWithProbes via ProbeService Signed-off-by: sukkyun2 * test: replace probeOperator with probeService - add mock probeService generated by mockery Signed-off-by: sukkyun2 * fix: reorder goimports Signed-off-by: sukkyun2 --------- Signed-off-by: sukkyun2 Co-authored-by: Namkyu Park <53862866+namkyu1999@users.noreply.github.com> --- chaoscenter/graphql/server/graph/resolver.go | 8 +- .../handler/fuzz_tests/handler_fuzz_test.go | 5 +- .../pkg/chaos_experiment/handler/handler.go | 9 +- .../chaos_experiment/handler/handler_test.go | 5 +- .../pkg/chaos_experiment/ops/service_test.go | 5 +- .../handler/fuzz_tests/handler_fuzz_test.go | 6 + .../chaos_experiment_run/handler/handler.go | 12 +- .../handler/handler_test.go | 11 +- .../chaos_infrastructure/fuzz/fuzz_test.go | 5 +- .../pkg/database/mongodb/probe/operations.go | 36 +- .../server/pkg/probe/handler/handler.go | 621 +++++++++++++++++- .../pkg/probe/{utils => handler}/types.go | 2 +- .../server/pkg/probe/model/mocks/service.go | 76 +++ .../graphql/server/pkg/probe/utils/utils.go | 567 ---------------- 14 files changed, 749 insertions(+), 619 deletions(-) rename chaoscenter/graphql/server/pkg/probe/{utils => handler}/types.go (99%) create mode 100644 chaoscenter/graphql/server/pkg/probe/model/mocks/service.go diff --git a/chaoscenter/graphql/server/graph/resolver.go b/chaoscenter/graphql/server/graph/resolver.go index e08b658a214..d36423b5abb 100644 --- a/chaoscenter/graphql/server/graph/resolver.go +++ b/chaoscenter/graphql/server/graph/resolver.go @@ -23,6 +23,7 @@ import ( "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/environments" gitops2 "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/gitops" image_registry2 "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/image_registry" + dbSchemaProbe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/probe" envHandler "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/environment/handler" gitops3 "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/gitops" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/image_registry" @@ -55,9 +56,10 @@ func NewConfig(mongodbOperator mongodb.MongoOperator) generated.Config { gitopsOperator := gitops2.NewGitOpsOperator(mongodbOperator) imageRegistryOperator := image_registry2.NewImageRegistryOperator(mongodbOperator) EnvironmentOperator := environments.NewEnvironmentOperator(mongodbOperator) + probeOperator := dbSchemaProbe.NewChaosProbeOperator(mongodbOperator) //service - probeService := probe.NewProbeService() + probeService := probe.NewProbeService(probeOperator) chaosHubService := chaoshub.NewService(chaosHubOperator) chaosInfrastructureService := chaos_infrastructure.NewChaosInfrastructureService(chaosInfraOperator, EnvironmentOperator) chaosExperimentService := chaos_experiment2.NewChaosExperimentService(chaosExperimentOperator, chaosInfraOperator, chaosExperimentRunOperator, probeService) @@ -67,8 +69,8 @@ func NewConfig(mongodbOperator mongodb.MongoOperator) generated.Config { environmentService := envHandler.NewEnvironmentService(EnvironmentOperator) //handler - chaosExperimentHandler := handler.NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, chaosInfrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, mongodbOperator) - choasExperimentRunHandler := runHandler.NewChaosExperimentRunHandler(chaosExperimentRunService, chaosInfrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, mongodbOperator) + chaosExperimentHandler := handler.NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, chaosInfrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, probeService, mongodbOperator) + choasExperimentRunHandler := runHandler.NewChaosExperimentRunHandler(chaosExperimentRunService, chaosInfrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, probeService, mongodbOperator) config := generated.Config{ Resolvers: &Resolver{ diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/fuzz_tests/handler_fuzz_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/fuzz_tests/handler_fuzz_test.go index 707a85be553..4afb3160560 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/fuzz_tests/handler_fuzz_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/fuzz_tests/handler_fuzz_test.go @@ -4,6 +4,8 @@ import ( "context" "testing" + dbProbeMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/model/mocks" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment/handler" chaosExperimentMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment/model/mocks" chaosExperimentRunMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment_run/model/mocks" @@ -45,8 +47,9 @@ func NewMockServices() *MockServices { chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) chaosExperimentService = new(chaosExperimentMocks.ChaosExperimentService) + probeService = new(dbProbeMocks.ProbeService) ) - var chaosExperimentHandler = handler.NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, mongodbMockOperator) + var chaosExperimentHandler = handler.NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, probeService, mongodbMockOperator) return &MockServices{ ChaosExperimentService: chaosExperimentService, ChaosExperimentRunService: chaosExperimentRunService, diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go index ee51be6d05f..419ae421dcb 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go @@ -9,7 +9,7 @@ import ( "strconv" "time" - probeUtils "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/utils" + probe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/handler" "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" chaosTypes "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -48,6 +48,7 @@ type ChaosExperimentHandler struct { gitOpsService gitops.Service chaosExperimentOperator *dbChaosExperiment.Operator chaosExperimentRunOperator *dbChaosExperimentRun.Operator + probeService probe.Service mongodbOperator mongodb.MongoOperator } @@ -59,6 +60,7 @@ func NewChaosExperimentHandler( gitOpsService gitops.Service, chaosExperimentOperator *dbChaosExperiment.Operator, chaosExperimentRunOperator *dbChaosExperimentRun.Operator, + probeService probe.Service, mongodbOperator mongodb.MongoOperator, ) *ChaosExperimentHandler { return &ChaosExperimentHandler{ @@ -68,6 +70,7 @@ func NewChaosExperimentHandler( gitOpsService: gitOpsService, chaosExperimentOperator: chaosExperimentOperator, chaosExperimentRunOperator: chaosExperimentRunOperator, + probeService: probeService, mongodbOperator: mongodbOperator, } } @@ -1347,7 +1350,7 @@ func (c *ChaosExperimentHandler) GetProbesInExperimentRun(ctx context.Context, p } for _, probeName := range _probe.ProbeNames { - singleProbe, err := dbSchemaProbe.GetProbeByName(ctx, probeName, projectID) + singleProbe, err := dbSchemaProbe.NewChaosProbeOperator(c.mongodbOperator).GetProbeByName(ctx, probeName, projectID) if err != nil { return nil, err } @@ -1456,7 +1459,7 @@ func (c *ChaosExperimentHandler) UpdateCronExperimentState(ctx context.Context, return false, errors.New("failed to marshal workflow manifest") } - cronWorkflowManifest, err = probeUtils.GenerateCronExperimentManifestWithProbes(string(updatedManifest), experiment.ProjectID) + cronWorkflowManifest, err = c.probeService.GenerateCronExperimentManifestWithProbes(string(updatedManifest), experiment.ProjectID) if err != nil { return false, fmt.Errorf("failed to unmarshal experiment manifest, error: %v", err) } diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go index bb4ea2ff3c2..e11e8d6d38d 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go @@ -6,6 +6,8 @@ import ( "reflect" "testing" + dbProbeMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/model/mocks" + "github.com/golang-jwt/jwt" "github.com/google/uuid" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" @@ -46,8 +48,9 @@ func NewMockServices() *MockServices { chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) chaosExperimentService = new(chaosExperimentMocks.ChaosExperimentService) + probeService = new(dbProbeMocks.ProbeService) ) - var chaosExperimentHandler = NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, mongodbMockOperator) + var chaosExperimentHandler = NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, probeService, mongodbMockOperator) return &MockServices{ ChaosExperimentService: chaosExperimentService, ChaosExperimentRunService: chaosExperimentRunService, diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment/ops/service_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment/ops/service_test.go index 65f2a6bfce0..71bd89da8b8 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment/ops/service_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment/ops/service_test.go @@ -10,6 +10,8 @@ import ( "reflect" "testing" + dbSchemaProbe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/probe" + "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" @@ -28,10 +30,11 @@ import ( var ( mongodbMockOperator = new(dbMocks.MongoOperator) + probeOperator = dbSchemaProbe.NewChaosProbeOperator(mongodbMockOperator) infraOperator = dbChaosInfra.NewInfrastructureOperator(mongodbMockOperator) chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) - probeService = probe.NewProbeService() + probeService = probe.NewProbeService(probeOperator) ) var chaosExperimentRunTestService = NewChaosExperimentService(chaosExperimentOperator, infraOperator, chaosExperimentRunOperator, probeService) diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/fuzz_tests/handler_fuzz_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/fuzz_tests/handler_fuzz_test.go index 56af374f378..c806c538a01 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/fuzz_tests/handler_fuzz_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/fuzz_tests/handler_fuzz_test.go @@ -6,6 +6,8 @@ import ( "testing" "time" + dbProbeMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/model/mocks" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler" chaosInfraMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_infrastructure/model/mocks" dbChaosExperiment "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment" @@ -32,6 +34,7 @@ type MockServices struct { ChaosExperimentRunOperator *dbChaosExperimentRun.Operator MongodbOperator *dbMocks.MongoOperator ChaosExperimentRunHandler *handler.ChaosExperimentRunHandler + ProbeService *dbProbeMocks.ProbeService } func NewMockServices() *MockServices { @@ -42,6 +45,7 @@ func NewMockServices() *MockServices { chaosExperimentRunService = new(typesMocks.ChaosExperimentRunService) chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) + probeService = new(dbProbeMocks.ProbeService) ) var chaosExperimentRunHandler = handler.NewChaosExperimentRunHandler( chaosExperimentRunService, @@ -49,6 +53,7 @@ func NewMockServices() *MockServices { gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, + probeService, mongodbMockOperator, ) return &MockServices{ @@ -58,6 +63,7 @@ func NewMockServices() *MockServices { ChaosExperimentOperator: chaosExperimentOperator, ChaosExperimentRunOperator: chaosExperimentRunOperator, MongodbOperator: mongodbMockOperator, + ProbeService: probeService, ChaosExperimentRunHandler: chaosExperimentRunHandler, } } diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler.go b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler.go index 166abe19973..d301ecd8c02 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler.go @@ -11,6 +11,8 @@ import ( "strings" "time" + probe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/handler" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/authorization" probeUtils "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/utils" @@ -41,9 +43,8 @@ import ( store "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/data-store" dbChaosExperiment "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment" - dbChaosInfra "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_infrastructure" - "github.com/google/uuid" + dbChaosInfra "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_infrastructure" ) // ChaosExperimentRunHandler is the handler for chaos experiment @@ -53,6 +54,7 @@ type ChaosExperimentRunHandler struct { gitOpsService gitops.Service chaosExperimentOperator *dbChaosExperiment.Operator chaosExperimentRunOperator *dbChaosExperimentRun.Operator + probeService probe.Service mongodbOperator mongodb.MongoOperator } @@ -63,6 +65,7 @@ func NewChaosExperimentRunHandler( gitOpsService gitops.Service, chaosExperimentOperator *dbChaosExperiment.Operator, chaosExperimentRunOperator *dbChaosExperimentRun.Operator, + probeService probe.Service, mongodbOperator mongodb.MongoOperator, ) *ChaosExperimentRunHandler { return &ChaosExperimentRunHandler{ @@ -71,6 +74,7 @@ func NewChaosExperimentRunHandler( gitOpsService: gitOpsService, chaosExperimentOperator: chaosExperimentOperator, chaosExperimentRunOperator: chaosExperimentRunOperator, + probeService: probeService, mongodbOperator: mongodbOperator, } } @@ -911,7 +915,7 @@ func (c *ChaosExperimentRunHandler) RunChaosWorkFlow(ctx context.Context, projec } // Generate Probe in the manifest - workflowManifest, err = probeUtils.GenerateExperimentManifestWithProbes(string(manifestString), projectID) + workflowManifest, err = c.probeService.GenerateExperimentManifestWithProbes(string(manifestString), projectID) if err != nil { return nil, fmt.Errorf("failed to generate probes in workflow manifest, err: %v", err) } @@ -944,7 +948,7 @@ func (c *ChaosExperimentRunHandler) RunCronExperiment(ctx context.Context, proje return workflow.Revision[i].UpdatedAt > workflow.Revision[j].UpdatedAt }) - cronExperimentManifest, err := probeUtils.GenerateCronExperimentManifestWithProbes(workflow.Revision[0].ExperimentManifest, workflow.ProjectID) + cronExperimentManifest, err := c.probeService.GenerateCronExperimentManifestWithProbes(workflow.Revision[0].ExperimentManifest, workflow.ProjectID) if err != nil { return errors.New("failed to unmarshal experiment manifest") } diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler_test.go index 6f08fa1f6cf..f22e59b545a 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler_test.go @@ -11,6 +11,9 @@ import ( "testing" "time" + probe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/handler" + dbProbeMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/model/mocks" + "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" @@ -38,9 +41,10 @@ var ( gitOpsService = new(dbGitOpsMocks.GitOpsService) chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) + probeService = new(dbProbeMocks.ProbeService) ) -var chaosExperimentRunHandler = NewChaosExperimentRunHandler(chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, mongodbMockOperator) +var chaosExperimentRunHandler = NewChaosExperimentRunHandler(chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, probeService, mongodbMockOperator) // TestMain is the entry point for testing func TestMain(m *testing.M) { @@ -56,6 +60,7 @@ func TestNewChaosExperimentRunHandler(t *testing.T) { gitOpsService gitops.Service chaosExperimentOperator *dbChaosExperiment.Operator chaosExperimentRunOperator *dbChaosExperimentRun.Operator + probeService probe.Service mongodbOperator mongodb.MongoOperator } tests := []struct { @@ -71,6 +76,7 @@ func TestNewChaosExperimentRunHandler(t *testing.T) { gitOpsService: gitOpsService, chaosExperimentOperator: chaosExperimentOperator, chaosExperimentRunOperator: chaosExperimentRunOperator, + probeService: probeService, mongodbOperator: mongodbMockOperator, }, want: &ChaosExperimentRunHandler{ @@ -79,13 +85,14 @@ func TestNewChaosExperimentRunHandler(t *testing.T) { gitOpsService: gitOpsService, chaosExperimentOperator: chaosExperimentOperator, chaosExperimentRunOperator: chaosExperimentRunOperator, + probeService: probeService, mongodbOperator: mongodbMockOperator, }, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - if got := NewChaosExperimentRunHandler(tc.args.chaosExperimentRunService, tc.args.infrastructureService, tc.args.gitOpsService, tc.args.chaosExperimentOperator, tc.args.chaosExperimentRunOperator, tc.args.mongodbOperator); !reflect.DeepEqual(got, tc.want) { + if got := NewChaosExperimentRunHandler(tc.args.chaosExperimentRunService, tc.args.infrastructureService, tc.args.gitOpsService, tc.args.chaosExperimentOperator, tc.args.chaosExperimentRunOperator, tc.args.probeService, tc.args.mongodbOperator); !reflect.DeepEqual(got, tc.want) { t.Errorf("NewChaosExperimentRunHandler() = %v, want %v", got, tc.want) } }) diff --git a/chaoscenter/graphql/server/pkg/chaos_infrastructure/fuzz/fuzz_test.go b/chaoscenter/graphql/server/pkg/chaos_infrastructure/fuzz/fuzz_test.go index b8fa0ff67b0..4fc9881b3d4 100644 --- a/chaoscenter/graphql/server/pkg/chaos_infrastructure/fuzz/fuzz_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_infrastructure/fuzz/fuzz_test.go @@ -4,6 +4,8 @@ import ( "context" "testing" + dbProbeMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/model/mocks" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment/handler" chaosExperimentMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment/model/mocks" @@ -41,9 +43,10 @@ func NewMockServices() *MockServices { gitOpsService = new(dbGitOpsMocks.GitOpsService) chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) + probeService = new(dbProbeMocks.ProbeService) chaosExperimentService = new(chaosExperimentMocks.ChaosExperimentService) ) - var chaosExperimentHandler = handler.NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, mongodbMockOperator) + var chaosExperimentHandler = handler.NewChaosExperimentHandler(chaosExperimentService, chaosExperimentRunService, infrastructureService, gitOpsService, chaosExperimentOperator, chaosExperimentRunOperator, probeService, mongodbMockOperator) return &MockServices{ ChaosExperimentService: chaosExperimentService, ChaosExperimentRunService: chaosExperimentRunService, diff --git a/chaoscenter/graphql/server/pkg/database/mongodb/probe/operations.go b/chaoscenter/graphql/server/pkg/database/mongodb/probe/operations.go index 5f6ad864ed6..1860d3dae1f 100644 --- a/chaoscenter/graphql/server/pkg/database/mongodb/probe/operations.go +++ b/chaoscenter/graphql/server/pkg/database/mongodb/probe/operations.go @@ -10,10 +10,22 @@ import ( "go.mongodb.org/mongo-driver/mongo" ) +// Operator is the model for probe collection +type Operator struct { + operator mongodb.MongoOperator +} + +// NewChaosProbeOperator returns a new instance of Operator +func NewChaosProbeOperator(mongodbOperator mongodb.MongoOperator) *Operator { + return &Operator{ + operator: mongodbOperator, + } +} + // CreateProbe creates a probe of a specific type (HTTP, PROM, K8s or CMD) // as a shared entity in the database -func CreateProbe(ctx context.Context, probe Probe) error { - err := mongodb.Operator.Create(ctx, mongodb.ChaosProbeCollection, probe) +func (p *Operator) CreateProbe(ctx context.Context, probe Probe) error { + err := p.operator.Create(ctx, mongodb.ChaosProbeCollection, probe) if err != nil { return err } @@ -21,8 +33,8 @@ func CreateProbe(ctx context.Context, probe Probe) error { } // GetAggregateProbes takes a mongo pipeline to retrieve the project details from the database -func GetAggregateProbes(ctx context.Context, pipeline mongo.Pipeline) (*mongo.Cursor, error) { - results, err := mongodb.Operator.Aggregate(ctx, mongodb.ChaosProbeCollection, pipeline) +func (p *Operator) GetAggregateProbes(ctx context.Context, pipeline mongo.Pipeline) (*mongo.Cursor, error) { + results, err := p.operator.Aggregate(ctx, mongodb.ChaosProbeCollection, pipeline) if err != nil { return nil, err } @@ -31,8 +43,8 @@ func GetAggregateProbes(ctx context.Context, pipeline mongo.Pipeline) (*mongo.Cu } // IsProbeUnique returns true if probe is unique -func IsProbeUnique(ctx context.Context, query bson.D) (bool, error) { - count, err := mongodb.Operator.CountDocuments(ctx, mongodb.ChaosProbeCollection, query) +func (p *Operator) IsProbeUnique(ctx context.Context, query bson.D) (bool, error) { + count, err := p.operator.CountDocuments(ctx, mongodb.ChaosProbeCollection, query) if err != nil { return false, err } @@ -44,8 +56,8 @@ func IsProbeUnique(ctx context.Context, query bson.D) (bool, error) { } // UpdateProbe updates details of a Probe -func UpdateProbe(ctx context.Context, query bson.D, updateQuery bson.D) (*mongo.UpdateResult, error) { - result, err := mongodb.Operator.Update(ctx, mongodb.ChaosProbeCollection, query, updateQuery) +func (p *Operator) UpdateProbe(ctx context.Context, query bson.D, updateQuery bson.D) (*mongo.UpdateResult, error) { + result, err := p.operator.Update(ctx, mongodb.ChaosProbeCollection, query, updateQuery) if err != nil { return nil, err } @@ -56,8 +68,8 @@ func UpdateProbe(ctx context.Context, query bson.D, updateQuery bson.D) (*mongo. } // UpdateProbes updates details of Probe -func UpdateProbes(ctx context.Context, query bson.D, updateQuery bson.D) (*mongo.UpdateResult, error) { - result, err := mongodb.Operator.UpdateMany(ctx, mongodb.ChaosProbeCollection, query, updateQuery) +func (p *Operator) UpdateProbes(ctx context.Context, query bson.D, updateQuery bson.D) (*mongo.UpdateResult, error) { + result, err := p.operator.UpdateMany(ctx, mongodb.ChaosProbeCollection, query, updateQuery) if err != nil { return nil, err } @@ -68,9 +80,9 @@ func UpdateProbes(ctx context.Context, query bson.D, updateQuery bson.D) (*mongo } // GetProbeByName fetches the details of a single Probe with its Probe Name -func GetProbeByName(ctx context.Context, probeName string, projectID string) (Probe, error) { +func (p *Operator) GetProbeByName(ctx context.Context, probeName string, projectID string) (Probe, error) { var probe Probe - result, err := mongodb.Operator.Get(ctx, mongodb.ChaosProbeCollection, bson.D{{"name", probeName}, {"project_id", projectID}, {"is_removed", false}}) + result, err := p.operator.Get(ctx, mongodb.ChaosProbeCollection, bson.D{{"name", probeName}, {"project_id", projectID}, {"is_removed", false}}) err = result.Decode(&probe) if err != nil { return Probe{}, err diff --git a/chaoscenter/graphql/server/pkg/probe/handler/handler.go b/chaoscenter/graphql/server/pkg/probe/handler/handler.go index fa9d45cf46b..193b81147d2 100644 --- a/chaoscenter/graphql/server/pkg/probe/handler/handler.go +++ b/chaoscenter/graphql/server/pkg/probe/handler/handler.go @@ -4,10 +4,15 @@ import ( "context" "encoding/json" "errors" + "fmt" "sort" "strconv" + "strings" "time" + argoTypes "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/ghodss/yaml" + dbChaosExperiment "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/utils" globalUtils "github.com/litmuschaos/litmus/chaoscenter/graphql/server/utils" @@ -19,7 +24,6 @@ import ( "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb" dbChaosExperimentRun "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment_run" dbSchemaProbe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/probe" - "github.com/sirupsen/logrus" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" @@ -34,12 +38,18 @@ type Service interface { GetProbeReference(ctx context.Context, probeName, projectID string) (*model.GetProbeReferenceResponse, error) GetProbeYAMLData(ctx context.Context, probe model.GetProbeYAMLRequest, projectID string) (string, error) ValidateUniqueProbe(ctx context.Context, probeName, projectID string) (bool, error) + GenerateExperimentManifestWithProbes(manifest string, projectID string) (argoTypes.Workflow, error) + GenerateCronExperimentManifestWithProbes(manifest string, projectID string) (argoTypes.CronWorkflow, error) } -type probe struct{} +type probeService struct { + probeOperator *dbSchemaProbe.Operator +} -func NewProbeService() Service { - return &probe{} +func NewProbeService(probeOperator *dbSchemaProbe.Operator) Service { + return &probeService{ + probeOperator: probeOperator, + } } func Error(logFields logrus.Fields, message string) error { @@ -48,7 +58,7 @@ func Error(logFields logrus.Fields, message string) error { } // AddProbe - Create a new Probe -func (p *probe) AddProbe(ctx context.Context, probe model.ProbeRequest, projectID string) (*model.Probe, error) { +func (p *probeService) AddProbe(ctx context.Context, probe model.ProbeRequest, projectID string) (*model.Probe, error) { // TODO: Add check if probe exists var ( @@ -118,7 +128,7 @@ func (p *probe) AddProbe(ctx context.Context, probe model.ProbeRequest, projectI } // Adding the new probe into database. - err = dbSchemaProbe.CreateProbe(ctx, *newProbe) + err = p.probeOperator.CreateProbe(ctx, *newProbe) if err != nil { return nil, err } @@ -127,14 +137,14 @@ func (p *probe) AddProbe(ctx context.Context, probe model.ProbeRequest, projectI } // UpdateProbe - Update a new Probe -func (p *probe) UpdateProbe(ctx context.Context, request model.ProbeRequest, projectID string) (string, error) { +func (p *probeService) UpdateProbe(ctx context.Context, request model.ProbeRequest, projectID string) (string, error) { tkn := ctx.Value(authorization.AuthKey).(string) username, err := authorization.GetUsername(tkn) if err != nil { return "", err } - pr, err := dbSchemaProbe.GetProbeByName(ctx, request.Name, projectID) + pr, err := p.probeOperator.GetProbeByName(ctx, request.Name, projectID) if err != nil { return "", err } @@ -197,7 +207,7 @@ func (p *probe) UpdateProbe(ctx context.Context, request model.ProbeRequest, pro {"is_removed", false}, } - _, err = dbSchemaProbe.UpdateProbe(ctx, filterQuery, updateQuery) + _, err = p.probeOperator.UpdateProbe(ctx, filterQuery, updateQuery) if err != nil { return "", err } @@ -206,9 +216,9 @@ func (p *probe) UpdateProbe(ctx context.Context, request model.ProbeRequest, pro } // GetProbe - List a single Probe -func (p *probe) GetProbe(ctx context.Context, probeName, projectID string) (*model.Probe, error) { +func (p *probeService) GetProbe(ctx context.Context, probeName, projectID string) (*model.Probe, error) { - probe, err := dbSchemaProbe.GetProbeByName(ctx, probeName, projectID) + probe, err := p.probeOperator.GetProbeByName(ctx, probeName, projectID) if err != nil { return nil, err } @@ -217,14 +227,14 @@ func (p *probe) GetProbe(ctx context.Context, probeName, projectID string) (*mod } // GetProbeYAMLData - Get the probe yaml data compatible with the chaos engine manifest -func (p *probe) GetProbeYAMLData(ctx context.Context, probeRequest model.GetProbeYAMLRequest, projectID string) (string, error) { +func (p *probeService) GetProbeYAMLData(ctx context.Context, probeRequest model.GetProbeYAMLRequest, projectID string) (string, error) { - probe, err := dbSchemaProbe.GetProbeByName(ctx, probeRequest.ProbeName, projectID) + probe, err := p.probeOperator.GetProbeByName(ctx, probeRequest.ProbeName, projectID) if err != nil { return "", err } - manifest, err := utils.GenerateProbeManifest(probe.GetOutputProbe(), probeRequest.Mode) + manifest, err := p.GenerateProbeManifest(probe.GetOutputProbe(), probeRequest.Mode) if err != nil { return "", err } @@ -233,7 +243,7 @@ func (p *probe) GetProbeYAMLData(ctx context.Context, probeRequest model.GetProb } // ListProbes - List a single/all Probes -func (p *probe) ListProbes(ctx context.Context, probeNames []string, infrastructureType *model.InfrastructureType, filter *model.ProbeFilterInput, projectID string) ([]*model.Probe, error) { +func (p *probeService) ListProbes(ctx context.Context, probeNames []string, infrastructureType *model.InfrastructureType, filter *model.ProbeFilterInput, projectID string) ([]*model.Probe, error) { var pipeline mongo.Pipeline // Match the Probe Names from the input array @@ -336,7 +346,7 @@ func (p *probe) ListProbes(ctx context.Context, probeNames []string, infrastruct var allProbes []dbSchemaProbe.Probe - probeCursor, err := dbSchemaProbe.GetAggregateProbes(ctx, pipeline) + probeCursor, err := p.probeOperator.GetAggregateProbes(ctx, pipeline) if err != nil { return nil, err } @@ -474,9 +484,9 @@ func GetProbeExecutionHistoryInExperimentRuns(projectID string, probeName string } // DeleteProbe - Deletes a single Probe -func (p *probe) DeleteProbe(ctx context.Context, probeName, projectID string) (bool, error) { +func (p *probeService) DeleteProbe(ctx context.Context, probeName, projectID string) (bool, error) { - _, err := dbSchemaProbe.GetProbeByName(ctx, probeName, projectID) + _, err := p.probeOperator.GetProbeByName(ctx, probeName, projectID) if err != nil { return false, err } @@ -500,7 +510,7 @@ func (p *probe) DeleteProbe(ctx context.Context, probeName, projectID string) (b }}, } - _, err = dbSchemaProbe.UpdateProbe(ctx, query, update) + _, err = p.probeOperator.UpdateProbe(ctx, query, update) if err != nil { return false, err } @@ -509,7 +519,7 @@ func (p *probe) DeleteProbe(ctx context.Context, probeName, projectID string) (b } // GetProbeReference - Get the experiment details the probe is referencing to -func (p *probe) GetProbeReference(ctx context.Context, probeName, projectID string) (*model.GetProbeReferenceResponse, error) { +func (p *probeService) GetProbeReference(ctx context.Context, probeName, projectID string) (*model.GetProbeReferenceResponse, error) { var pipeline mongo.Pipeline @@ -564,7 +574,7 @@ func (p *probe) GetProbeReference(ctx context.Context, probeName, projectID stri pipeline = append(pipeline, experimentWithSelectedProbeName) // Call aggregation on pipeline - probeCursor, err := dbSchemaProbe.GetAggregateProbes(ctx, pipeline) + probeCursor, err := p.probeOperator.GetAggregateProbes(ctx, pipeline) if err != nil { return nil, err } @@ -694,17 +704,582 @@ func (p *probe) GetProbeReference(ctx context.Context, probeName, projectID stri } // ValidateUniqueProbe - Validates the uniqueness of the probe, returns true if unique -func (p *probe) ValidateUniqueProbe(ctx context.Context, probeName, projectID string) (bool, error) { +func (p *probeService) ValidateUniqueProbe(ctx context.Context, probeName, projectID string) (bool, error) { query := bson.D{ {"name", probeName}, {"project_id", bson.D{{"$eq", projectID}}}, } - isUnique, err := dbSchemaProbe.IsProbeUnique(ctx, query) + isUnique, err := p.probeOperator.IsProbeUnique(ctx, query) if err != nil { return false, err } return isUnique, nil } + +// GenerateExperimentManifestWithProbes - uses GenerateProbeManifest to get and store the respective probe attribute into Raw Data template for Non Cron Workflow +func (p *probeService) GenerateExperimentManifestWithProbes(manifest string, projectID string) (argoTypes.Workflow, error) { + var ( + backgroundContext = context.Background() + nonCronManifest argoTypes.Workflow + ) + + ctx, cancel := context.WithTimeout(backgroundContext, 10*time.Second) + defer cancel() + + err := json.Unmarshal([]byte(manifest), &nonCronManifest) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal experiment manifest, error: %s", err.Error()) + } + + for i, template := range nonCronManifest.Spec.Templates { + artifact := template.Inputs.Artifacts + + if len(artifact) > 0 { + if artifact[0].Raw == nil { + continue + } + data := artifact[0].Raw.Data + if len(data) > 0 { + var ( + meta v1alpha1.ChaosEngine + annotation = make(map[string]string) + probes []v1alpha1.ProbeAttributes + httpProbe HTTPProbeAttributes + cmdProbe CMDProbeAttributes + promProbe PROMProbeAttributes + k8sProbe K8SProbeAttributes + ) + + err := yaml.Unmarshal([]byte(data), &meta) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal chaosengine, error: %s", err.Error()) + } + if strings.ToLower(meta.Kind) == "chaosengine" { + + probes = meta.Spec.Experiments[0].Spec.Probe + + if meta.Annotations != nil { + annotation = meta.Annotations + } + + for _, key := range annotation { + var manifestAnnotation []dbChaosExperiment.ProbeAnnotations + if strings.HasPrefix(key, "[{\"name\"") { + err := json.Unmarshal([]byte(key), &manifestAnnotation) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal experiment annotation object, error: %s", err.Error()) + } + for _, annotationKey := range manifestAnnotation { + probe, err := p.probeOperator.GetProbeByName(ctx, annotationKey.Name, projectID) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to fetch probe details, error: %s", err.Error()) + } + probeManifestString, err := p.GenerateProbeManifest(probe.GetOutputProbe(), annotationKey.Mode) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to generate probe manifest, error: %s", err.Error()) + } + + if model.ProbeType(probe.Type) == model.ProbeTypeHTTPProbe { + err := json.Unmarshal([]byte(probeManifestString), &httpProbe) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal http probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: httpProbe.Name, + Type: httpProbe.Type, + HTTPProbeInputs: &v1alpha1.HTTPProbeInputs{ + URL: httpProbe.HTTPProbeInputs.URL, + InsecureSkipVerify: httpProbe.HTTPProbeInputs.InsecureSkipVerify, + Method: httpProbe.HTTPProbeInputs.Method, + }, + RunProperties: httpProbe.RunProperties, + Mode: httpProbe.Mode, + }) + } else if model.ProbeType(probe.Type) == model.ProbeTypeCmdProbe { + err := json.Unmarshal([]byte(probeManifestString), &cmdProbe) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal cmd probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: cmdProbe.Name, + Type: cmdProbe.Type, + CmdProbeInputs: &v1alpha1.CmdProbeInputs{ + Command: cmdProbe.CmdProbeInputs.Command, + Comparator: cmdProbe.CmdProbeInputs.Comparator, + }, + RunProperties: cmdProbe.RunProperties, + Mode: cmdProbe.Mode, + }) + } else if model.ProbeType(probe.Type) == model.ProbeTypePromProbe { + err := json.Unmarshal([]byte(probeManifestString), &promProbe) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal prom probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: promProbe.Name, + Type: promProbe.Type, + PromProbeInputs: &v1alpha1.PromProbeInputs{ + Endpoint: promProbe.PromProbeInputs.Endpoint, + Query: promProbe.PromProbeInputs.Query, + QueryPath: promProbe.PromProbeInputs.QueryPath, + Comparator: promProbe.PromProbeInputs.Comparator, + }, + RunProperties: promProbe.RunProperties, + Mode: promProbe.Mode, + }) + } else if model.ProbeType(probe.Type) == model.ProbeTypeK8sProbe { + err := json.Unmarshal([]byte(probeManifestString), &k8sProbe) + if err != nil { + return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal k8s probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: k8sProbe.Name, + Type: k8sProbe.Type, + K8sProbeInputs: &v1alpha1.K8sProbeInputs{ + Group: k8sProbe.K8sProbeInputs.Group, + Version: k8sProbe.K8sProbeInputs.Version, + Resource: k8sProbe.K8sProbeInputs.Resource, + ResourceNames: k8sProbe.K8sProbeInputs.ResourceNames, + Namespace: k8sProbe.K8sProbeInputs.Namespace, + FieldSelector: k8sProbe.K8sProbeInputs.FieldSelector, + LabelSelector: k8sProbe.K8sProbeInputs.LabelSelector, + Operation: k8sProbe.K8sProbeInputs.Operation, + }, + RunProperties: k8sProbe.RunProperties, + Mode: k8sProbe.Mode, + }) + } + } + } + } + + if len(meta.Spec.Experiments) > 0 { + meta.Spec.Experiments[0].Spec.Probe = probes + } + + res, err := yaml.Marshal(&meta) + if err != nil { + return argoTypes.Workflow{}, errors.New("failed to marshal chaosengine") + } + nonCronManifest.Spec.Templates[i].Inputs.Artifacts[0].Raw.Data = string(res) + } + } + } + } + + return nonCronManifest, nil +} + +// GenerateCronExperimentManifestWithProbes - uses GenerateProbeManifest to get and store the respective probe attribute into Raw Data template +func (p *probeService) GenerateCronExperimentManifestWithProbes(manifest string, projectID string) (argoTypes.CronWorkflow, error) { + var ( + backgroundContext = context.Background() + cronManifest argoTypes.CronWorkflow + ) + + ctx, cancel := context.WithTimeout(backgroundContext, 10*time.Second) + defer cancel() + + if err := json.Unmarshal([]byte(manifest), &cronManifest); err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal experiment manifest, error: %s", err.Error()) + } + + for i, template := range cronManifest.Spec.WorkflowSpec.Templates { + artifact := template.Inputs.Artifacts + + if len(artifact) > 0 { + if artifact[0].Raw == nil { + continue + } + data := artifact[0].Raw.Data + if len(data) > 0 { + var ( + meta v1alpha1.ChaosEngine + annotation = make(map[string]string) + probes []v1alpha1.ProbeAttributes + httpProbe HTTPProbeAttributes + cmdProbe CMDProbeAttributes + promProbe PROMProbeAttributes + k8sProbe K8SProbeAttributes + ) + + if err := yaml.Unmarshal([]byte(data), &meta); err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal chaosengine, error: %s", err.Error()) + } + + if strings.ToLower(meta.Kind) == "chaosengine" { + + probes = meta.Spec.Experiments[0].Spec.Probe + + if meta.Annotations != nil { + annotation = meta.Annotations + } + + for _, key := range annotation { + var manifestAnnotation []dbChaosExperiment.ProbeAnnotations + err := json.Unmarshal([]byte(key), &manifestAnnotation) + if err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal experiment annotation object, error: %s", err.Error()) + } + for _, annotationKey := range manifestAnnotation { + probe, err := p.probeOperator.GetProbeByName(ctx, annotationKey.Name, projectID) + if err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to fetch probe details, error: %s", err.Error()) + } + + probeManifestString, err := p.GenerateProbeManifest(probe.GetOutputProbe(), annotationKey.Mode) + + if model.ProbeType(probe.Type) == model.ProbeTypeHTTPProbe { + if err := json.Unmarshal([]byte(probeManifestString), &httpProbe); err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal http probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: httpProbe.Name, + Type: httpProbe.Type, + HTTPProbeInputs: &v1alpha1.HTTPProbeInputs{ + URL: httpProbe.HTTPProbeInputs.URL, + InsecureSkipVerify: httpProbe.HTTPProbeInputs.InsecureSkipVerify, + Method: httpProbe.HTTPProbeInputs.Method, + }, + RunProperties: httpProbe.RunProperties, + Mode: httpProbe.Mode, + }) + } else if model.ProbeType(probe.Type) == model.ProbeTypeCmdProbe { + if err := json.Unmarshal([]byte(probeManifestString), &cmdProbe); err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal cmd probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: cmdProbe.Name, + Type: cmdProbe.Type, + CmdProbeInputs: &v1alpha1.CmdProbeInputs{ + Command: cmdProbe.CmdProbeInputs.Command, + Comparator: cmdProbe.CmdProbeInputs.Comparator, + }, + RunProperties: cmdProbe.RunProperties, + Mode: cmdProbe.Mode, + }) + } else if model.ProbeType(probe.Type) == model.ProbeTypePromProbe { + if err := json.Unmarshal([]byte(probeManifestString), &promProbe); err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal prom probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: promProbe.Name, + Type: promProbe.Type, + PromProbeInputs: &v1alpha1.PromProbeInputs{ + Endpoint: promProbe.PromProbeInputs.Endpoint, + Query: promProbe.PromProbeInputs.Query, + QueryPath: promProbe.PromProbeInputs.QueryPath, + Comparator: promProbe.PromProbeInputs.Comparator, + }, + RunProperties: promProbe.RunProperties, + Mode: promProbe.Mode, + }) + } else if model.ProbeType(probe.Type) == model.ProbeTypeK8sProbe { + if err := json.Unmarshal([]byte(probeManifestString), &k8sProbe); err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal k8s probe, error: %s", err.Error()) + } + + probes = append(probes, v1alpha1.ProbeAttributes{ + Name: k8sProbe.Name, + Type: k8sProbe.Type, + K8sProbeInputs: &v1alpha1.K8sProbeInputs{ + Group: k8sProbe.K8sProbeInputs.Group, + Version: k8sProbe.K8sProbeInputs.Version, + Resource: k8sProbe.K8sProbeInputs.Resource, + ResourceNames: k8sProbe.K8sProbeInputs.ResourceNames, + Namespace: k8sProbe.K8sProbeInputs.Namespace, + FieldSelector: k8sProbe.K8sProbeInputs.FieldSelector, + LabelSelector: k8sProbe.K8sProbeInputs.LabelSelector, + Operation: k8sProbe.K8sProbeInputs.Operation, + }, + RunProperties: k8sProbe.RunProperties, + Mode: k8sProbe.Mode, + }) + } + } + } + + if len(meta.Spec.Experiments) > 0 { + meta.Spec.Experiments[0].Spec.Probe = probes + } + + res, err := yaml.Marshal(&meta) + if err != nil { + return argoTypes.CronWorkflow{}, fmt.Errorf("failed to marshal chaosengine, error: %s", err.Error()) + } + cronManifest.Spec.WorkflowSpec.Templates[i].Inputs.Artifacts[0].Raw.Data = string(res) + } + } + } + } + + return cronManifest, nil +} + +// GenerateProbeManifest - Generates the types and returns a marshalled probe attribute configuration +func (p *probeService) GenerateProbeManifest(probe *model.Probe, mode model.Mode) (string, error) { + if probe.Type == model.ProbeTypeHTTPProbe { + + httpProbeURL := probe.KubernetesHTTPProperties.URL + var _probe HTTPProbeAttributes + + _probe.Name = probe.Name + _probe.Type = string(probe.Type) + _probe.Mode = string(mode) + + if probe.KubernetesHTTPProperties.InsecureSkipVerify != nil { + _probe.HTTPProbeInputs = v1alpha1.HTTPProbeInputs{ + InsecureSkipVerify: *probe.KubernetesHTTPProperties.InsecureSkipVerify, + } + } + + if probe.KubernetesHTTPProperties.Method.Get != nil { + _probe.HTTPProbeInputs = v1alpha1.HTTPProbeInputs{ + URL: httpProbeURL, + Method: v1alpha1.HTTPMethod{ + Get: &v1alpha1.GetMethod{ + Criteria: probe.KubernetesHTTPProperties.Method.Get.Criteria, + ResponseCode: probe.KubernetesHTTPProperties.Method.Get.ResponseCode, + }, + }, + } + } else if probe.KubernetesHTTPProperties.Method.Post != nil { + _probe.HTTPProbeInputs = v1alpha1.HTTPProbeInputs{ + URL: httpProbeURL, + Method: v1alpha1.HTTPMethod{ + Post: &v1alpha1.PostMethod{ + Criteria: probe.KubernetesHTTPProperties.Method.Post.Criteria, + ResponseCode: probe.KubernetesHTTPProperties.Method.Post.ResponseCode, + }, + }, + } + + if probe.KubernetesHTTPProperties.Method.Post.ContentType != nil { + _probe.HTTPProbeInputs.Method.Post.ContentType = *probe.KubernetesHTTPProperties.Method.Post.ContentType + } + + if probe.KubernetesHTTPProperties.Method.Post.Body != nil { + _probe.HTTPProbeInputs.Method.Post.Body = *probe.KubernetesHTTPProperties.Method.Post.Body + } + + if probe.KubernetesHTTPProperties.Method.Post.BodyPath != nil { + _probe.HTTPProbeInputs.Method.Post.BodyPath = *probe.KubernetesHTTPProperties.Method.Post.BodyPath + } + } + + _probe.RunProperties = v1alpha1.RunProperty{ + ProbeTimeout: probe.KubernetesHTTPProperties.ProbeTimeout, + Interval: probe.KubernetesHTTPProperties.Interval, + } + + if probe.KubernetesHTTPProperties.Attempt != nil { + _probe.RunProperties.Attempt = *probe.KubernetesHTTPProperties.Attempt + } + + if probe.KubernetesHTTPProperties.Retry != nil { + _probe.RunProperties.Retry = *probe.KubernetesHTTPProperties.Retry + } + + if probe.KubernetesHTTPProperties.ProbePollingInterval != nil { + _probe.RunProperties.ProbePollingInterval = *probe.KubernetesHTTPProperties.ProbePollingInterval + } + + if probe.KubernetesHTTPProperties.EvaluationTimeout != nil { + _probe.RunProperties.EvaluationTimeout = *probe.KubernetesHTTPProperties.EvaluationTimeout + } + + if probe.KubernetesHTTPProperties.StopOnFailure != nil { + _probe.RunProperties.StopOnFailure = *probe.KubernetesHTTPProperties.StopOnFailure + } + + y, err := json.Marshal(_probe) + if err != nil { + return "", err + } + + return string(y), err + } else if probe.Type == model.ProbeTypeCmdProbe { + + var _probe CMDProbeAttributes + + _probe.Name = probe.Name + _probe.Type = string(probe.Type) + _probe.Mode = string(mode) + _probe.CmdProbeInputs = v1alpha1.CmdProbeInputs{ + Command: probe.KubernetesCMDProperties.Command, + Comparator: v1alpha1.ComparatorInfo{ + Type: probe.KubernetesCMDProperties.Comparator.Type, + Criteria: probe.KubernetesCMDProperties.Comparator.Criteria, + Value: probe.KubernetesCMDProperties.Comparator.Value, + }, + } + + _probe.RunProperties = v1alpha1.RunProperty{ + ProbeTimeout: probe.KubernetesCMDProperties.ProbeTimeout, + Interval: probe.KubernetesCMDProperties.Interval, + } + + if probe.KubernetesCMDProperties.Attempt != nil { + _probe.RunProperties.Attempt = *probe.KubernetesCMDProperties.Attempt + } + + if probe.KubernetesCMDProperties.Retry != nil { + _probe.RunProperties.Retry = *probe.KubernetesCMDProperties.Retry + } + + if probe.KubernetesCMDProperties.ProbePollingInterval != nil { + _probe.RunProperties.ProbePollingInterval = *probe.KubernetesCMDProperties.ProbePollingInterval + } + + if probe.KubernetesCMDProperties.EvaluationTimeout != nil { + _probe.RunProperties.EvaluationTimeout = *probe.KubernetesCMDProperties.EvaluationTimeout + } + + if probe.KubernetesCMDProperties.InitialDelay != nil { + _probe.RunProperties.InitialDelay = *probe.KubernetesCMDProperties.InitialDelay + } + + if probe.KubernetesCMDProperties.StopOnFailure != nil { + _probe.RunProperties.StopOnFailure = *probe.KubernetesCMDProperties.StopOnFailure + } + + y, err := json.Marshal(_probe) + if err != nil { + return "", err + } + + return string(y), err + } else if probe.Type == model.ProbeTypePromProbe { + + var _probe PROMProbeAttributes + + _probe.Name = probe.Name + _probe.Type = string(probe.Type) + _probe.Mode = string(mode) + _probe.PromProbeInputs = v1alpha1.PromProbeInputs{ + Endpoint: probe.PromProperties.Endpoint, + Comparator: v1alpha1.ComparatorInfo{ + Type: probe.PromProperties.Comparator.Type, + Criteria: probe.PromProperties.Comparator.Criteria, + Value: probe.PromProperties.Comparator.Value, + }, + } + + if probe.PromProperties.Query != nil { + _probe.PromProbeInputs.Query = *probe.PromProperties.Query + } + + if probe.PromProperties.QueryPath != nil { + _probe.PromProbeInputs.QueryPath = *probe.PromProperties.QueryPath + } + + _probe.RunProperties = v1alpha1.RunProperty{ + ProbeTimeout: probe.PromProperties.ProbeTimeout, + Interval: probe.PromProperties.Interval, + } + + if probe.PromProperties.Attempt != nil { + _probe.RunProperties.Attempt = *probe.PromProperties.Attempt + } + + if probe.PromProperties.Retry != nil { + _probe.RunProperties.Retry = *probe.PromProperties.Retry + } + + if probe.PromProperties.ProbePollingInterval != nil { + _probe.RunProperties.ProbePollingInterval = *probe.PromProperties.ProbePollingInterval + } + + if probe.PromProperties.EvaluationTimeout != nil { + _probe.RunProperties.EvaluationTimeout = *probe.PromProperties.EvaluationTimeout + } + + if probe.PromProperties.InitialDelay != nil { + _probe.RunProperties.InitialDelay = *probe.PromProperties.InitialDelay + } + + if probe.PromProperties.StopOnFailure != nil { + _probe.RunProperties.StopOnFailure = *probe.PromProperties.StopOnFailure + } + + y, err := json.Marshal(_probe) + if err != nil { + return "", err + } + + return string(y), err + } else if probe.Type == model.ProbeTypeK8sProbe { + + var _probe K8SProbeAttributes + + _probe.Name = probe.Name + _probe.Type = string(probe.Type) + _probe.Mode = string(mode) + _probe.K8sProbeInputs.Version = probe.K8sProperties.Version + _probe.K8sProbeInputs.Resource = probe.K8sProperties.Resource + _probe.K8sProbeInputs.Operation = probe.K8sProperties.Operation + + if probe.K8sProperties.Group != nil { + _probe.K8sProbeInputs.Group = *probe.K8sProperties.Group + } + + if probe.K8sProperties.Namespace != nil { + _probe.K8sProbeInputs.Namespace = *probe.K8sProperties.Namespace + } + + if probe.K8sProperties.FieldSelector != nil { + _probe.K8sProbeInputs.FieldSelector = *probe.K8sProperties.FieldSelector + } + + if probe.K8sProperties.LabelSelector != nil { + _probe.K8sProbeInputs.LabelSelector = *probe.K8sProperties.LabelSelector + } + + _probe.RunProperties = v1alpha1.RunProperty{ + ProbeTimeout: probe.K8sProperties.ProbeTimeout, + Interval: probe.K8sProperties.Interval, + } + + if probe.K8sProperties.Attempt != nil { + _probe.RunProperties.Attempt = *probe.K8sProperties.Attempt + } + + if probe.K8sProperties.Retry != nil { + _probe.RunProperties.Retry = *probe.K8sProperties.Retry + } + + if probe.K8sProperties.ProbePollingInterval != nil { + _probe.RunProperties.ProbePollingInterval = *probe.K8sProperties.ProbePollingInterval + } + + if probe.K8sProperties.EvaluationTimeout != nil { + _probe.RunProperties.EvaluationTimeout = *probe.K8sProperties.EvaluationTimeout + } + + if probe.K8sProperties.InitialDelay != nil { + _probe.RunProperties.InitialDelay = *probe.K8sProperties.InitialDelay + } + + if probe.K8sProperties.StopOnFailure != nil { + _probe.RunProperties.StopOnFailure = *probe.K8sProperties.StopOnFailure + } + + y, err := json.Marshal(_probe) + if err != nil { + return "", err + } + + return string(y), err + } + return "", nil +} diff --git a/chaoscenter/graphql/server/pkg/probe/utils/types.go b/chaoscenter/graphql/server/pkg/probe/handler/types.go similarity index 99% rename from chaoscenter/graphql/server/pkg/probe/utils/types.go rename to chaoscenter/graphql/server/pkg/probe/handler/types.go index d45ce7db1b6..8052733fda7 100644 --- a/chaoscenter/graphql/server/pkg/probe/utils/types.go +++ b/chaoscenter/graphql/server/pkg/probe/handler/types.go @@ -1,4 +1,4 @@ -package utils +package handler import ( "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" diff --git a/chaoscenter/graphql/server/pkg/probe/model/mocks/service.go b/chaoscenter/graphql/server/pkg/probe/model/mocks/service.go new file mode 100644 index 00000000000..d06f611ae3d --- /dev/null +++ b/chaoscenter/graphql/server/pkg/probe/model/mocks/service.go @@ -0,0 +1,76 @@ +package mocks + +import ( + "context" + + "github.com/stretchr/testify/mock" + + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" + + "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" +) + +// ProbeService is an autogenerated mock type for the Service type +type ProbeService struct { + mock.Mock +} + +// AddProbe provides a mock function with given fields: ctx, probe, projectID +func (_m *ProbeService) AddProbe(ctx context.Context, probe model.ProbeRequest, projectID string) (*model.Probe, error) { + ret := _m.Called(ctx, probe, projectID) + return ret.Get(0).(*model.Probe), ret.Error(1) +} + +// DeleteProbe provides a mock function with given fields: ctx, probeName, projectID +func (_m *ProbeService) DeleteProbe(ctx context.Context, probeName string, projectID string) (bool, error) { + ret := _m.Called(ctx, probeName, projectID) + return ret.Get(0).(bool), ret.Error(1) +} + +// GenerateCronExperimentManifestWithProbes provides a mock function with given fields: manifest, projectID +func (_m *ProbeService) GenerateCronExperimentManifestWithProbes(manifest string, projectID string) (v1alpha1.CronWorkflow, error) { + ret := _m.Called(manifest, projectID) + return ret.Get(0).(v1alpha1.CronWorkflow), ret.Error(1) +} + +// GenerateExperimentManifestWithProbes provides a mock function with given fields: manifest, projectID +func (_m *ProbeService) GenerateExperimentManifestWithProbes(manifest string, projectID string) (v1alpha1.Workflow, error) { + ret := _m.Called(manifest, projectID) + return ret.Get(0).(v1alpha1.Workflow), ret.Error(1) +} + +// GetProbe provides a mock function with given fields: ctx, probeName, projectID +func (_m *ProbeService) GetProbe(ctx context.Context, probeName string, projectID string) (*model.Probe, error) { + ret := _m.Called(ctx, probeName, projectID) + return ret.Get(0).(*model.Probe), ret.Error(1) +} + +// GetProbeReference provides a mock function with given fields: ctx, probeName, projectID +func (_m *ProbeService) GetProbeReference(ctx context.Context, probeName string, projectID string) (*model.GetProbeReferenceResponse, error) { + ret := _m.Called(ctx, probeName, projectID) + return ret.Get(0).(*model.GetProbeReferenceResponse), ret.Error(1) +} + +// GetProbeYAMLData provides a mock function with given fields: ctx, probe, projectID +func (_m *ProbeService) GetProbeYAMLData(ctx context.Context, probe model.GetProbeYAMLRequest, projectID string) (string, error) { + ret := _m.Called(ctx, probe, projectID) + return ret.Get(0).(string), ret.Error(1) +} + +// ListProbes provides a mock function with given fields: ctx, probeNames, infrastructureType, filter, projectID +func (_m *ProbeService) ListProbes(ctx context.Context, probeNames []string, infrastructureType *model.InfrastructureType, filter *model.ProbeFilterInput, projectID string) ([]*model.Probe, error) { + ret := _m.Called(ctx, probeNames, infrastructureType, filter, projectID) + return ret.Get(0).([]*model.Probe), ret.Error(1) +} + +// UpdateProbe provides a mock function with given fields: ctx, probe, projectID +func (_m *ProbeService) UpdateProbe(ctx context.Context, probe model.ProbeRequest, projectID string) (string, error) { + ret := _m.Called(ctx, probe, projectID) + return ret.Get(0).(string), ret.Error(1) +} + +// ValidateUniqueProbe provides a mock function with given fields: ctx, probeName, projectID +func (_m *ProbeService) ValidateUniqueProbe(ctx context.Context, probeName string, projectID string) (bool, error) { + ret := _m.Called(ctx, probeName, projectID) + return ret.Get(0).(bool), ret.Error(1) +} diff --git a/chaoscenter/graphql/server/pkg/probe/utils/utils.go b/chaoscenter/graphql/server/pkg/probe/utils/utils.go index bd378c33249..6fb6ee2603d 100644 --- a/chaoscenter/graphql/server/pkg/probe/utils/utils.go +++ b/chaoscenter/graphql/server/pkg/probe/utils/utils.go @@ -1,12 +1,10 @@ package utils import ( - "context" "encoding/json" "errors" "fmt" "strings" - "time" argoTypes "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" "github.com/ghodss/yaml" @@ -220,264 +218,6 @@ func AddK8SProbeProperties(newProbe *dbSchemaProbe.Probe, request model.ProbeReq return newProbe } -// GenerateProbeManifest - Generates the types and returns a marshalled probe attribute configuration -func GenerateProbeManifest(probe *model.Probe, mode model.Mode) (string, error) { - if probe.Type == model.ProbeTypeHTTPProbe { - - httpProbeURL := probe.KubernetesHTTPProperties.URL - var _probe HTTPProbeAttributes - - _probe.Name = probe.Name - _probe.Type = string(probe.Type) - _probe.Mode = string(mode) - - if probe.KubernetesHTTPProperties.InsecureSkipVerify != nil { - _probe.HTTPProbeInputs = v1alpha1.HTTPProbeInputs{ - InsecureSkipVerify: *probe.KubernetesHTTPProperties.InsecureSkipVerify, - } - } - - if probe.KubernetesHTTPProperties.Method.Get != nil { - _probe.HTTPProbeInputs = v1alpha1.HTTPProbeInputs{ - URL: httpProbeURL, - Method: v1alpha1.HTTPMethod{ - Get: &v1alpha1.GetMethod{ - Criteria: probe.KubernetesHTTPProperties.Method.Get.Criteria, - ResponseCode: probe.KubernetesHTTPProperties.Method.Get.ResponseCode, - }, - }, - } - } else if probe.KubernetesHTTPProperties.Method.Post != nil { - _probe.HTTPProbeInputs = v1alpha1.HTTPProbeInputs{ - URL: httpProbeURL, - Method: v1alpha1.HTTPMethod{ - Post: &v1alpha1.PostMethod{ - Criteria: probe.KubernetesHTTPProperties.Method.Post.Criteria, - ResponseCode: probe.KubernetesHTTPProperties.Method.Post.ResponseCode, - }, - }, - } - - if probe.KubernetesHTTPProperties.Method.Post.ContentType != nil { - _probe.HTTPProbeInputs.Method.Post.ContentType = *probe.KubernetesHTTPProperties.Method.Post.ContentType - } - - if probe.KubernetesHTTPProperties.Method.Post.Body != nil { - _probe.HTTPProbeInputs.Method.Post.Body = *probe.KubernetesHTTPProperties.Method.Post.Body - } - - if probe.KubernetesHTTPProperties.Method.Post.BodyPath != nil { - _probe.HTTPProbeInputs.Method.Post.BodyPath = *probe.KubernetesHTTPProperties.Method.Post.BodyPath - } - } - - _probe.RunProperties = v1alpha1.RunProperty{ - ProbeTimeout: probe.KubernetesHTTPProperties.ProbeTimeout, - Interval: probe.KubernetesHTTPProperties.Interval, - } - - if probe.KubernetesHTTPProperties.Attempt != nil { - _probe.RunProperties.Attempt = *probe.KubernetesHTTPProperties.Attempt - } - - if probe.KubernetesHTTPProperties.Retry != nil { - _probe.RunProperties.Retry = *probe.KubernetesHTTPProperties.Retry - } - - if probe.KubernetesHTTPProperties.ProbePollingInterval != nil { - _probe.RunProperties.ProbePollingInterval = *probe.KubernetesHTTPProperties.ProbePollingInterval - } - - if probe.KubernetesHTTPProperties.EvaluationTimeout != nil { - _probe.RunProperties.EvaluationTimeout = *probe.KubernetesHTTPProperties.EvaluationTimeout - } - - if probe.KubernetesHTTPProperties.StopOnFailure != nil { - _probe.RunProperties.StopOnFailure = *probe.KubernetesHTTPProperties.StopOnFailure - } - - y, err := json.Marshal(_probe) - if err != nil { - return "", err - } - - return string(y), err - } else if probe.Type == model.ProbeTypeCmdProbe { - - var _probe CMDProbeAttributes - - _probe.Name = probe.Name - _probe.Type = string(probe.Type) - _probe.Mode = string(mode) - _probe.CmdProbeInputs = v1alpha1.CmdProbeInputs{ - Command: probe.KubernetesCMDProperties.Command, - Comparator: v1alpha1.ComparatorInfo{ - Type: probe.KubernetesCMDProperties.Comparator.Type, - Criteria: probe.KubernetesCMDProperties.Comparator.Criteria, - Value: probe.KubernetesCMDProperties.Comparator.Value, - }, - } - - _probe.RunProperties = v1alpha1.RunProperty{ - ProbeTimeout: probe.KubernetesCMDProperties.ProbeTimeout, - Interval: probe.KubernetesCMDProperties.Interval, - } - - if probe.KubernetesCMDProperties.Attempt != nil { - _probe.RunProperties.Attempt = *probe.KubernetesCMDProperties.Attempt - } - - if probe.KubernetesCMDProperties.Retry != nil { - _probe.RunProperties.Retry = *probe.KubernetesCMDProperties.Retry - } - - if probe.KubernetesCMDProperties.ProbePollingInterval != nil { - _probe.RunProperties.ProbePollingInterval = *probe.KubernetesCMDProperties.ProbePollingInterval - } - - if probe.KubernetesCMDProperties.EvaluationTimeout != nil { - _probe.RunProperties.EvaluationTimeout = *probe.KubernetesCMDProperties.EvaluationTimeout - } - - if probe.KubernetesCMDProperties.InitialDelay != nil { - _probe.RunProperties.InitialDelay = *probe.KubernetesCMDProperties.InitialDelay - } - - if probe.KubernetesCMDProperties.StopOnFailure != nil { - _probe.RunProperties.StopOnFailure = *probe.KubernetesCMDProperties.StopOnFailure - } - - y, err := json.Marshal(_probe) - if err != nil { - return "", err - } - - return string(y), err - } else if probe.Type == model.ProbeTypePromProbe { - - var _probe PROMProbeAttributes - - _probe.Name = probe.Name - _probe.Type = string(probe.Type) - _probe.Mode = string(mode) - _probe.PromProbeInputs = v1alpha1.PromProbeInputs{ - Endpoint: probe.PromProperties.Endpoint, - Comparator: v1alpha1.ComparatorInfo{ - Type: probe.PromProperties.Comparator.Type, - Criteria: probe.PromProperties.Comparator.Criteria, - Value: probe.PromProperties.Comparator.Value, - }, - } - - if probe.PromProperties.Query != nil { - _probe.PromProbeInputs.Query = *probe.PromProperties.Query - } - - if probe.PromProperties.QueryPath != nil { - _probe.PromProbeInputs.QueryPath = *probe.PromProperties.QueryPath - } - - _probe.RunProperties = v1alpha1.RunProperty{ - ProbeTimeout: probe.PromProperties.ProbeTimeout, - Interval: probe.PromProperties.Interval, - } - - if probe.PromProperties.Attempt != nil { - _probe.RunProperties.Attempt = *probe.PromProperties.Attempt - } - - if probe.PromProperties.Retry != nil { - _probe.RunProperties.Retry = *probe.PromProperties.Retry - } - - if probe.PromProperties.ProbePollingInterval != nil { - _probe.RunProperties.ProbePollingInterval = *probe.PromProperties.ProbePollingInterval - } - - if probe.PromProperties.EvaluationTimeout != nil { - _probe.RunProperties.EvaluationTimeout = *probe.PromProperties.EvaluationTimeout - } - - if probe.PromProperties.InitialDelay != nil { - _probe.RunProperties.InitialDelay = *probe.PromProperties.InitialDelay - } - - if probe.PromProperties.StopOnFailure != nil { - _probe.RunProperties.StopOnFailure = *probe.PromProperties.StopOnFailure - } - - y, err := json.Marshal(_probe) - if err != nil { - return "", err - } - - return string(y), err - } else if probe.Type == model.ProbeTypeK8sProbe { - - var _probe K8SProbeAttributes - - _probe.Name = probe.Name - _probe.Type = string(probe.Type) - _probe.Mode = string(mode) - _probe.K8sProbeInputs.Version = probe.K8sProperties.Version - _probe.K8sProbeInputs.Resource = probe.K8sProperties.Resource - _probe.K8sProbeInputs.Operation = probe.K8sProperties.Operation - - if probe.K8sProperties.Group != nil { - _probe.K8sProbeInputs.Group = *probe.K8sProperties.Group - } - - if probe.K8sProperties.Namespace != nil { - _probe.K8sProbeInputs.Namespace = *probe.K8sProperties.Namespace - } - - if probe.K8sProperties.FieldSelector != nil { - _probe.K8sProbeInputs.FieldSelector = *probe.K8sProperties.FieldSelector - } - - if probe.K8sProperties.LabelSelector != nil { - _probe.K8sProbeInputs.LabelSelector = *probe.K8sProperties.LabelSelector - } - - _probe.RunProperties = v1alpha1.RunProperty{ - ProbeTimeout: probe.K8sProperties.ProbeTimeout, - Interval: probe.K8sProperties.Interval, - } - - if probe.K8sProperties.Attempt != nil { - _probe.RunProperties.Attempt = *probe.K8sProperties.Attempt - } - - if probe.K8sProperties.Retry != nil { - _probe.RunProperties.Retry = *probe.K8sProperties.Retry - } - - if probe.K8sProperties.ProbePollingInterval != nil { - _probe.RunProperties.ProbePollingInterval = *probe.K8sProperties.ProbePollingInterval - } - - if probe.K8sProperties.EvaluationTimeout != nil { - _probe.RunProperties.EvaluationTimeout = *probe.K8sProperties.EvaluationTimeout - } - - if probe.K8sProperties.InitialDelay != nil { - _probe.RunProperties.InitialDelay = *probe.K8sProperties.InitialDelay - } - - if probe.K8sProperties.StopOnFailure != nil { - _probe.RunProperties.StopOnFailure = *probe.K8sProperties.StopOnFailure - } - - y, err := json.Marshal(_probe) - if err != nil { - return "", err - } - - return string(y), err - } - return "", nil -} - // ParseProbesFromManifest - Parses the manifest to return probes which is stored in the DB func ParseProbesFromManifest(wfType *dbChaosExperiment.ChaosExperimentType, manifest string) ([]dbChaosExperiment.Probes, error) { var ( @@ -696,313 +436,6 @@ func ParseProbesFromManifestForRuns(wfType *dbChaosExperiment.ChaosExperimentTyp return probes, nil } -// GenerateExperimentManifestWithProbes - uses GenerateProbeManifest to get and store the respective probe attribute into Raw Data template for Non Cron Workflow -func GenerateExperimentManifestWithProbes(manifest string, projectID string) (argoTypes.Workflow, error) { - var ( - backgroundContext = context.Background() - nonCronManifest argoTypes.Workflow - ) - - ctx, cancel := context.WithTimeout(backgroundContext, 10*time.Second) - defer cancel() - - err := json.Unmarshal([]byte(manifest), &nonCronManifest) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal experiment manifest, error: %s", err.Error()) - } - - for i, template := range nonCronManifest.Spec.Templates { - artifact := template.Inputs.Artifacts - - if len(artifact) > 0 { - if artifact[0].Raw == nil { - continue - } - data := artifact[0].Raw.Data - if len(data) > 0 { - var ( - meta v1alpha1.ChaosEngine - annotation = make(map[string]string) - probes []v1alpha1.ProbeAttributes - httpProbe HTTPProbeAttributes - cmdProbe CMDProbeAttributes - promProbe PROMProbeAttributes - k8sProbe K8SProbeAttributes - ) - - err := yaml.Unmarshal([]byte(data), &meta) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal chaosengine, error: %s", err.Error()) - } - if strings.ToLower(meta.Kind) == "chaosengine" { - - probes = meta.Spec.Experiments[0].Spec.Probe - - if meta.Annotations != nil { - annotation = meta.Annotations - } - - for _, key := range annotation { - var manifestAnnotation []dbChaosExperiment.ProbeAnnotations - if strings.HasPrefix(key, "[{\"name\"") { - err := json.Unmarshal([]byte(key), &manifestAnnotation) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal experiment annotation object, error: %s", err.Error()) - } - for _, annotationKey := range manifestAnnotation { - probe, err := dbSchemaProbe.GetProbeByName(ctx, annotationKey.Name, projectID) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to fetch probe details, error: %s", err.Error()) - } - probeManifestString, err := GenerateProbeManifest(probe.GetOutputProbe(), annotationKey.Mode) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to generate probe manifest, error: %s", err.Error()) - } - - if model.ProbeType(probe.Type) == model.ProbeTypeHTTPProbe { - err := json.Unmarshal([]byte(probeManifestString), &httpProbe) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal http probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: httpProbe.Name, - Type: httpProbe.Type, - HTTPProbeInputs: &v1alpha1.HTTPProbeInputs{ - URL: httpProbe.HTTPProbeInputs.URL, - InsecureSkipVerify: httpProbe.HTTPProbeInputs.InsecureSkipVerify, - Method: httpProbe.HTTPProbeInputs.Method, - }, - RunProperties: httpProbe.RunProperties, - Mode: httpProbe.Mode, - }) - } else if model.ProbeType(probe.Type) == model.ProbeTypeCmdProbe { - err := json.Unmarshal([]byte(probeManifestString), &cmdProbe) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal cmd probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: cmdProbe.Name, - Type: cmdProbe.Type, - CmdProbeInputs: &v1alpha1.CmdProbeInputs{ - Command: cmdProbe.CmdProbeInputs.Command, - Comparator: cmdProbe.CmdProbeInputs.Comparator, - }, - RunProperties: cmdProbe.RunProperties, - Mode: cmdProbe.Mode, - }) - } else if model.ProbeType(probe.Type) == model.ProbeTypePromProbe { - err := json.Unmarshal([]byte(probeManifestString), &promProbe) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal prom probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: promProbe.Name, - Type: promProbe.Type, - PromProbeInputs: &v1alpha1.PromProbeInputs{ - Endpoint: promProbe.PromProbeInputs.Endpoint, - Query: promProbe.PromProbeInputs.Query, - QueryPath: promProbe.PromProbeInputs.QueryPath, - Comparator: promProbe.PromProbeInputs.Comparator, - }, - RunProperties: promProbe.RunProperties, - Mode: promProbe.Mode, - }) - } else if model.ProbeType(probe.Type) == model.ProbeTypeK8sProbe { - err := json.Unmarshal([]byte(probeManifestString), &k8sProbe) - if err != nil { - return argoTypes.Workflow{}, fmt.Errorf("failed to unmarshal k8s probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: k8sProbe.Name, - Type: k8sProbe.Type, - K8sProbeInputs: &v1alpha1.K8sProbeInputs{ - Group: k8sProbe.K8sProbeInputs.Group, - Version: k8sProbe.K8sProbeInputs.Version, - Resource: k8sProbe.K8sProbeInputs.Resource, - ResourceNames: k8sProbe.K8sProbeInputs.ResourceNames, - Namespace: k8sProbe.K8sProbeInputs.Namespace, - FieldSelector: k8sProbe.K8sProbeInputs.FieldSelector, - LabelSelector: k8sProbe.K8sProbeInputs.LabelSelector, - Operation: k8sProbe.K8sProbeInputs.Operation, - }, - RunProperties: k8sProbe.RunProperties, - Mode: k8sProbe.Mode, - }) - } - } - } - } - - if len(meta.Spec.Experiments) > 0 { - meta.Spec.Experiments[0].Spec.Probe = probes - } - - res, err := yaml.Marshal(&meta) - if err != nil { - return argoTypes.Workflow{}, errors.New("failed to marshal chaosengine") - } - nonCronManifest.Spec.Templates[i].Inputs.Artifacts[0].Raw.Data = string(res) - } - } - } - } - - return nonCronManifest, nil -} - -// GenerateCronExperimentManifestWithProbes - uses GenerateProbeManifest to get and store the respective probe attribute into Raw Data template -func GenerateCronExperimentManifestWithProbes(manifest string, projectID string) (argoTypes.CronWorkflow, error) { - var ( - backgroundContext = context.Background() - cronManifest argoTypes.CronWorkflow - ) - - ctx, cancel := context.WithTimeout(backgroundContext, 10*time.Second) - defer cancel() - - if err := json.Unmarshal([]byte(manifest), &cronManifest); err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal experiment manifest, error: %s", err.Error()) - } - - for i, template := range cronManifest.Spec.WorkflowSpec.Templates { - artifact := template.Inputs.Artifacts - - if len(artifact) > 0 { - if artifact[0].Raw == nil { - continue - } - data := artifact[0].Raw.Data - if len(data) > 0 { - var ( - meta v1alpha1.ChaosEngine - annotation = make(map[string]string) - probes []v1alpha1.ProbeAttributes - httpProbe HTTPProbeAttributes - cmdProbe CMDProbeAttributes - promProbe PROMProbeAttributes - k8sProbe K8SProbeAttributes - ) - - if err := yaml.Unmarshal([]byte(data), &meta); err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal chaosengine, error: %s", err.Error()) - } - - if strings.ToLower(meta.Kind) == "chaosengine" { - - probes = meta.Spec.Experiments[0].Spec.Probe - - if meta.Annotations != nil { - annotation = meta.Annotations - } - - for _, key := range annotation { - var manifestAnnotation []dbChaosExperiment.ProbeAnnotations - err := json.Unmarshal([]byte(key), &manifestAnnotation) - if err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal experiment annotation object, error: %s", err.Error()) - } - for _, annotationKey := range manifestAnnotation { - probe, err := dbSchemaProbe.GetProbeByName(ctx, annotationKey.Name, projectID) - if err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to fetch probe details, error: %s", err.Error()) - } - - probeManifestString, err := GenerateProbeManifest(probe.GetOutputProbe(), annotationKey.Mode) - - if model.ProbeType(probe.Type) == model.ProbeTypeHTTPProbe { - if err := json.Unmarshal([]byte(probeManifestString), &httpProbe); err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal http probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: httpProbe.Name, - Type: httpProbe.Type, - HTTPProbeInputs: &v1alpha1.HTTPProbeInputs{ - URL: httpProbe.HTTPProbeInputs.URL, - InsecureSkipVerify: httpProbe.HTTPProbeInputs.InsecureSkipVerify, - Method: httpProbe.HTTPProbeInputs.Method, - }, - RunProperties: httpProbe.RunProperties, - Mode: httpProbe.Mode, - }) - } else if model.ProbeType(probe.Type) == model.ProbeTypeCmdProbe { - if err := json.Unmarshal([]byte(probeManifestString), &cmdProbe); err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal cmd probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: cmdProbe.Name, - Type: cmdProbe.Type, - CmdProbeInputs: &v1alpha1.CmdProbeInputs{ - Command: cmdProbe.CmdProbeInputs.Command, - Comparator: cmdProbe.CmdProbeInputs.Comparator, - }, - RunProperties: cmdProbe.RunProperties, - Mode: cmdProbe.Mode, - }) - } else if model.ProbeType(probe.Type) == model.ProbeTypePromProbe { - if err := json.Unmarshal([]byte(probeManifestString), &promProbe); err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal prom probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: promProbe.Name, - Type: promProbe.Type, - PromProbeInputs: &v1alpha1.PromProbeInputs{ - Endpoint: promProbe.PromProbeInputs.Endpoint, - Query: promProbe.PromProbeInputs.Query, - QueryPath: promProbe.PromProbeInputs.QueryPath, - Comparator: promProbe.PromProbeInputs.Comparator, - }, - RunProperties: promProbe.RunProperties, - Mode: promProbe.Mode, - }) - } else if model.ProbeType(probe.Type) == model.ProbeTypeK8sProbe { - if err := json.Unmarshal([]byte(probeManifestString), &k8sProbe); err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to unmarshal k8s probe, error: %s", err.Error()) - } - - probes = append(probes, v1alpha1.ProbeAttributes{ - Name: k8sProbe.Name, - Type: k8sProbe.Type, - K8sProbeInputs: &v1alpha1.K8sProbeInputs{ - Group: k8sProbe.K8sProbeInputs.Group, - Version: k8sProbe.K8sProbeInputs.Version, - Resource: k8sProbe.K8sProbeInputs.Resource, - ResourceNames: k8sProbe.K8sProbeInputs.ResourceNames, - Namespace: k8sProbe.K8sProbeInputs.Namespace, - FieldSelector: k8sProbe.K8sProbeInputs.FieldSelector, - LabelSelector: k8sProbe.K8sProbeInputs.LabelSelector, - Operation: k8sProbe.K8sProbeInputs.Operation, - }, - RunProperties: k8sProbe.RunProperties, - Mode: k8sProbe.Mode, - }) - } - } - } - - if len(meta.Spec.Experiments) > 0 { - meta.Spec.Experiments[0].Spec.Probe = probes - } - - res, err := yaml.Marshal(&meta) - if err != nil { - return argoTypes.CronWorkflow{}, fmt.Errorf("failed to marshal chaosengine, error: %s", err.Error()) - } - cronManifest.Spec.WorkflowSpec.Templates[i].Inputs.Artifacts[0].Raw.Data = string(res) - } - } - } - } - - return cronManifest, nil -} - func InsertProbeRefAnnotation(rawYaml, value string) (string, error) { var data interface{} From dcc7f60b7e59db3e82146ca7c38f34f7c1e43668 Mon Sep 17 00:00:00 2001 From: Saransh Shankar <103821431+Wise-Wizard@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:06:08 +0530 Subject: [PATCH 12/14] Add Pre Commit Check (#4642) * Removed unused strings in strings.en.yml Signed-off-by: Wise-Wizard * Removed unncessary changes Signed-off-by: Wise-Wizard * Removed Comments Signed-off-by: Wise-Wizard --------- Signed-off-by: Wise-Wizard Co-authored-by: Namkyu Park <53862866+namkyu1999@users.noreply.github.com> Co-authored-by: Sayan Mondal --- chaoscenter/web/.husky/pre-commit | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/chaoscenter/web/.husky/pre-commit b/chaoscenter/web/.husky/pre-commit index 8952a103b01..31720adb010 100755 --- a/chaoscenter/web/.husky/pre-commit +++ b/chaoscenter/web/.husky/pre-commit @@ -2,11 +2,31 @@ "$(dirname "$0")/_/husky.sh" MATCH_PATH='chaoscenter/web/' +STRINGS_FILE="chaoscenter/web/strings/strings.en.yaml" + +check_and_delete_unused_strings() { +TEMP_FILE=$(mktemp) +grep -rEo '\b[a-zA-Z0-9_]+\b' chaoscenter/web/**/*.js > "$TEMP_FILE" +UNUSED_STRINGS=$(grep -v '^#' "$STRINGS_FILE" | grep -vFf "$TEMP_FILE" | grep -oE '^[a-zA-Z0-9_]+') +rm "$TEMP_FILE" + + if [ -n "$UNUSED_STRINGS" ]; then + echo "Unused strings found: $UNUSED_STRINGS" + for UNUSED_STRING in $UNUSED_STRINGS; do + sed -i "/$UNUSED_STRING:/d" "$STRINGS_FILE" + done + echo "Unused strings deleted from $STRINGS_FILE" + else + echo "No unused strings found in $STRINGS_FILE" + fi +} + +check_and_delete_unused_strings BRANCH=$(git rev-parse --abbrev-ref HEAD) -if [ "$BRANCH" = "main" ]; then - echo "\033[0;31;1mYou can't commit directly to main branch\033[0m" +if [ "$BRANCH" = "master" ]; then + echo "\033[0;31;1mYou can't commit directly to master branch\033[0m" exit 1 fi @@ -24,4 +44,4 @@ if [ "$LITMUS_UI_FILE_CHANGES" -gt 0 ]; cd ./chaoscenter/web && yarn lint-staged else echo "\033[0;93mSkipping husky pre-commit hook in $MATCH_PATH folder\033[0m" -fi \ No newline at end of file +fi From faa6e482a5d49c2117ebde32820d9b87613be8d4 Mon Sep 17 00:00:00 2001 From: Suhyen Im Date: Fri, 22 Nov 2024 16:38:32 +0900 Subject: [PATCH 13/14] feat: add otel-demo tutorial (#4858) * feat: add otel-demo tutorial Co-authored-by: Suhyen Im Co-authored-by: Jaeyeon Park Signed-off-by: Suhyen Im Signed-off-by: Jaeyeon Park * feat: add otel-demo screenshots Co-authored-by: Suhyen Im Co-authored-by: Jaeyeon Park Signed-off-by: Suhyen Im Signed-off-by: Jaeyeon Park * chore: update tutorial and architecture image Co-authored-by: Suhyen Im Co-authored-by: Jaeyeon Park Signed-off-by: Suhyen Im Signed-off-by: Jaeyeon Park --------- Signed-off-by: Suhyen Im Signed-off-by: Jaeyeon Park Co-authored-by: Jaeyeon Park Co-authored-by: Namkyu Park <53862866+namkyu1999@users.noreply.github.com> --- monitoring/README.md | 4 + monitoring/tutorials/README.md | 7 + monitoring/tutorials/otel-demo/README.md | 95 +++ .../otel-demo/cart-service/README.md | 26 + .../cart-service-pod-network-latency.yml | 315 +++++++++ .../otel-demo/chaos-exporter-dashboard.json | 647 ++++++++++++++++++ .../otel-demo/custom_otel_demo_values.yml | 79 +++ .../recommendation-service/README.md | 27 + .../recommendation-service-pod-delete.yml | 286 ++++++++ ...rk_latency_experiment_result_dashboard.png | Bin 0 -> 167336 bytes .../screenshots/cartservice_spanmetrics.png | Bin 0 -> 187696 bytes .../screenshots/frontend_spanmetrics.png | Bin 0 -> 270156 bytes .../otel_demo_tutorial_architecture.png | Bin 0 -> 1232806 bytes ...pod_delete_experiment_result_dashboard.png | Bin 0 -> 226141 bytes 14 files changed, 1486 insertions(+) create mode 100644 monitoring/tutorials/README.md create mode 100644 monitoring/tutorials/otel-demo/README.md create mode 100644 monitoring/tutorials/otel-demo/cart-service/README.md create mode 100644 monitoring/tutorials/otel-demo/cart-service/cart-service-pod-network-latency.yml create mode 100644 monitoring/tutorials/otel-demo/chaos-exporter-dashboard.json create mode 100644 monitoring/tutorials/otel-demo/custom_otel_demo_values.yml create mode 100644 monitoring/tutorials/otel-demo/recommendation-service/README.md create mode 100644 monitoring/tutorials/otel-demo/recommendation-service/recommendation-service-pod-delete.yml create mode 100644 monitoring/tutorials/otel-demo/screenshots/cart_service_pod_network_latency_experiment_result_dashboard.png create mode 100644 monitoring/tutorials/otel-demo/screenshots/cartservice_spanmetrics.png create mode 100644 monitoring/tutorials/otel-demo/screenshots/frontend_spanmetrics.png create mode 100644 monitoring/tutorials/otel-demo/screenshots/otel_demo_tutorial_architecture.png create mode 100644 monitoring/tutorials/otel-demo/screenshots/recommendation_service_pod_delete_experiment_result_dashboard.png diff --git a/monitoring/README.md b/monitoring/README.md index ee0c5e5301a..1e0eb95abad 100644 --- a/monitoring/README.md +++ b/monitoring/README.md @@ -12,6 +12,10 @@ This directory contains chaos interleaved grafana dashboards along with the util > Contains utilities required to setup monitoring infrastructure on a kubernetes cluster. +- [Tutorials](./tutorials) + + > Contains tutorials for users on monitoring target applications under chaos using various tools. + ## Setup the LitmusChaos Infrastructure - Install the litmus chaos operator and CRDs diff --git a/monitoring/tutorials/README.md b/monitoring/tutorials/README.md new file mode 100644 index 00000000000..e092e6fc1ad --- /dev/null +++ b/monitoring/tutorials/README.md @@ -0,0 +1,7 @@ +# Tutorials + +This directory contains tutorials for users on monitoring target applications under chaos using various tools. + +- [Otel-demo](./otel-demo) + + > Contains a tutorial on injecting chaos into target applications using LitmusChaos and observing the chaos with OpenTelemetry. diff --git a/monitoring/tutorials/otel-demo/README.md b/monitoring/tutorials/otel-demo/README.md new file mode 100644 index 00000000000..48c6d5b9e5e --- /dev/null +++ b/monitoring/tutorials/otel-demo/README.md @@ -0,0 +1,95 @@ +# Otel-demo tutorial + +This tutorial provides a step-by-step guide for injecting chaos into target applications using LitmusChaos and observing the chaos with OpenTelemetry. + +otel_demo_tutorial_architecture + +### 0. Prerequisites +- Kubernetes 1.24+ +- 8 GB of free RAM +- Helm 3.9+ + +### 1. Install Litmus +1. Create the `litmus` namespace. + ```bash + kubectl create ns litmus + ``` +2. Add the Litmus Helm repository. + ```bash + helm repo add litmuschaos https://litmuschaos.github.io/litmus-helm/ + ``` +3. Install Litmus using Helm. + ```bash + helm install chaos litmuschaos/litmus \ + --namespace=litmus \ + --set portal.frontend.service.type=NodePort \ + --set mongodb.image.registry=ghcr.io/zcube \ + --set mongodb.image.repository=bitnami-compat/mongodb \ + --set mongodb.image.tag=6.0.5 + ``` +4. Verify the installation. + ```bash + kubectl get all -n litmus + ``` +5. Forward the Litmus frontend service port. + ```bash + kubectl port-forward svc/chaos-litmus-frontend-service 9091:9091 -n litmus + ``` + Access the Litmus frontend at [http://localhost:9091](http://localhost:9091) and log in with `admin` / `litmus`. + +### 2. Set Up Litmus Environment +1. Create a new environment. + - Environment Name: `local` + - Environment Type: `Production` +2. Configure a new chaos infrastructure. + - Name: `local` + - Chaos Components Installation: `Cluster-wide access` + - Installation Location (Namespace): `litmus` + - Service Account Name: `litmus` +3. Deploy the new chaos infrastructure. + ```bash + cd ~/Downloads + kubectl apply -f local-litmus-chaos-enable.yml + ``` + Wait until the status shows `CONNECTED`. + +### 3. Install Otel-demo microservices & Observability tools +1. Create the `otel-demo` namespace. + ```bash + kubectl create ns otel-demo + ``` +2. Add the OpenTelemetry Helm repository. + ```bash + helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts + ``` +3. Install Otel-demo microservices and Observability tools using Helm. + ```bash + cd litmus/monitoring/tutorials/otel-demo + helm install my-otel-demo open-telemetry/opentelemetry-demo --namespace otel-demo --values custom_otel_demo_values.yml + ``` + It contains Otel-demo microservices, OpenTelemetry(with chaos metrics), Prometheus, Jaeger and Grafana. +4. Verify the installation. + ```bash + kubectl get all -n otel-demo + ``` +5. Forward the Otel-demo frontend proxy port. + ```bash + kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080 -n otel-demo + ``` +6. Access the following services. + - Web store: [http://localhost:8080/](http://localhost:8080/) + - Grafana: [http://localhost:8080/grafana/](http://localhost:8080/grafana/) + - Load Generator UI: [http://localhost:8080/loadgen/](http://localhost:8080/loadgen/) + - Jaeger UI: [http://localhost:8080/jaeger/ui/](http://localhost:8080/jaeger/ui/) + +### 4. Add Grafana Panel +Import the `chaos-experiments-dashboard.json` file into Grafana to visualize the results of chaos experiments. + +### 5. Observe chaos +Explore the following experiments to observe chaos on the Otel-demo microservices. + +- [Pod Network Latency](./cart-service) + > Performs a pod network latency experiment on the cart service. + +- [Pod Delete](./recommendation-service) + > Performs a pod delete experiment on the recommendation service. diff --git a/monitoring/tutorials/otel-demo/cart-service/README.md b/monitoring/tutorials/otel-demo/cart-service/README.md new file mode 100644 index 00000000000..335aa14e98d --- /dev/null +++ b/monitoring/tutorials/otel-demo/cart-service/README.md @@ -0,0 +1,26 @@ +# cart service pod network latency +## Description +- This experiment injects network latency to the cart service pod. +- The Probe checks Prometheus metrics Latency of cart service requests. +## Steps +### 1. Probe Settings +- probe type: `Prometheus Probe` +- name: `cart-service-pod-network-latency-probe` +- timeout: 3s +- interval: 3s +- prometheus endpoint: `http://my-otel-demo-prometheus-server.otel-demo:9090` +- prometheus query: `histogram_quantile(0.99, sum(rate(duration_milliseconds_bucket{service_name=\"cartservice\"}[5m])) by (le))/1000` +- Data Comparison: + - Type: Float + - Criteria: `<` + - Value: `3.0` +### 2. Make Experiment +1. New Experimnet +2. Complete Overview +3. Start off by Upload YML(cart-service-pod-network-latency.yml) +### 3. Run Experiment +1. Click on the `Run` button +2. Check Experiment Status and Logs +3. Check the Resilience Score +4. Check the Chaos Exporter metrics using Grafana and confirm if the experiment failed. ![cart_service_pod_network_latency_experiment_result_dashboard.png](../screenshots/cart_service_pod_network_latency_experiment_result_dashboard.png) +5. Check cart service Spanmetrics Metrics using Grafana ![cartservice_spanmetrics.png](../screenshots/cartservice_spanmetrics.png) \ No newline at end of file diff --git a/monitoring/tutorials/otel-demo/cart-service/cart-service-pod-network-latency.yml b/monitoring/tutorials/otel-demo/cart-service/cart-service-pod-network-latency.yml new file mode 100644 index 00000000000..5aa913a3356 --- /dev/null +++ b/monitoring/tutorials/otel-demo/cart-service/cart-service-pod-network-latency.yml @@ -0,0 +1,315 @@ +kind: Workflow +apiVersion: argoproj.io/v1alpha1 +metadata: + name: cart-service-pod-network-latency + namespace: litmus + creationTimestamp: null + labels: + infra_id: 5b9be872-6396-4ad1-b64a-ed4b25edd516 + revision_id: bd738dca-14f0-4145-8f67-afb3d8c17991 + workflow_id: 1912f522-5197-4bd5-8854-732ccf1882bb + workflows.argoproj.io/controller-instanceid: 5b9be872-6396-4ad1-b64a-ed4b25edd516 +spec: + templates: + - name: test + inputs: {} + outputs: {} + metadata: {} + steps: + - - name: install-chaos-faults + template: install-chaos-faults + arguments: {} + - - name: pod-network-latency-pok + template: pod-network-latency-pok + arguments: {} + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources + arguments: {} + - name: install-chaos-faults + inputs: + artifacts: + - name: pod-network-latency-pok + path: /tmp/pod-network-latency-pok.yaml + raw: + data: > + 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: + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + - apiGroups: + - "" + resources: + - events + verbs: + - create + - get + - list + - patch + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - apiGroups: + - "" + resources: + - pods/log + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - pods/exec + verbs: + - get + - list + - create + - apiGroups: + - apps + resources: + - deployments + - statefulsets + - replicasets + - daemonsets + verbs: + - list + - get + - apiGroups: + - apps.openshift.io + resources: + - deploymentconfigs + verbs: + - list + - get + - apiGroups: + - "" + resources: + - replicationcontrollers + verbs: + - get + - list + - apiGroups: + - argoproj.io + resources: + - rollouts + verbs: + - list + - get + - apiGroups: + - batch + resources: + - jobs + verbs: + - create + - list + - get + - delete + - deletecollection + - apiGroups: + - litmuschaos.io + resources: + - chaosengines + - chaosexperiments + - chaosresults + verbs: + - create + - list + - get + - patch + - update + - delete + image: docker.io/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 + - name: LIB_IMAGE + value: docker.io/litmuschaos/go-runner:latest + - name: TC_IMAGE + value: gaiadocker/iproute2 + - name: NETWORK_LATENCY + value: "2000" + - name: TOTAL_CHAOS_DURATION + value: "60" + - name: RAMP_TIME + value: "" + - name: JITTER + value: "0" + - name: PODS_AFFECTED_PERC + value: "" + - name: TARGET_PODS + value: "" + - name: CONTAINER_RUNTIME + value: containerd + - name: DEFAULT_HEALTH_CHECK + value: "false" + - name: DESTINATION_IPS + value: "" + - name: DESTINATION_HOSTS + value: "" + - name: SOCKET_PATH + value: /run/containerd/containerd.sock + - name: NODE_LABEL + value: "" + - 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 + outputs: {} + metadata: {} + container: + name: "" + image: litmuschaos/k8s:2.11.0 + command: + - sh + - -c + args: + - kubectl apply -f /tmp/ -n {{workflow.parameters.adminModeNamespace}} + && sleep 30 + resources: {} + - name: cleanup-chaos-resources + inputs: {} + outputs: {} + metadata: {} + container: + name: "" + image: litmuschaos/k8s:2.11.0 + command: + - sh + - -c + args: + - kubectl delete chaosengine -l workflow_run_id={{workflow.uid}} -n + {{workflow.parameters.adminModeNamespace}} + resources: {} + - name: pod-network-latency-pok + inputs: + artifacts: + - name: pod-network-latency-pok + path: /tmp/chaosengine-pod-network-latency-pok.yaml + raw: + data: > + apiVersion: litmuschaos.io/v1alpha1 + + kind: ChaosEngine + + metadata: + namespace: "{{workflow.parameters.adminModeNamespace}}" + labels: + workflow_run_id: "{{ workflow.uid }}" + workflow_name: cart-service-pod-network-latency + annotations: + probeRef: '[{"name":"cart-service-pod-network-latency-probe","mode":"EOT"}]' + generateName: pod-network-latency-pok + spec: + engineState: active + appinfo: + appns: otel-demo + applabel: app.kubernetes.io/component=cartservice + appkind: deployment + chaosServiceAccount: litmus-admin + experiments: + - name: pod-network-latency + spec: + components: + env: + - name: TARGET_CONTAINER + value: "" + - name: NETWORK_INTERFACE + value: eth0 + - name: LIB_IMAGE + value: docker.io/litmuschaos/go-runner:latest + - name: TC_IMAGE + value: gaiadocker/iproute2 + - name: NETWORK_LATENCY + value: "2000" + - name: TOTAL_CHAOS_DURATION + value: "150" + - name: RAMP_TIME + value: "" + - name: JITTER + value: "0" + - name: PODS_AFFECTED_PERC + value: "" + - name: TARGET_PODS + value: "" + - name: CONTAINER_RUNTIME + value: containerd + - name: DEFAULT_HEALTH_CHECK + value: "false" + - name: DESTINATION_IPS + value: "" + - name: DESTINATION_HOSTS + value: "" + - name: SOCKET_PATH + value: /run/containerd/containerd.sock + - name: NODE_LABEL + value: "" + - name: SEQUENCE + value: parallel + outputs: {} + metadata: + labels: + weight: "10" + container: + name: "" + image: docker.io/litmuschaos/litmus-checker:2.11.0 + args: + - -file=/tmp/chaosengine-pod-network-latency-pok.yaml + - -saveName=/tmp/engine-name + resources: {} + entrypoint: test + arguments: + parameters: + - name: adminModeNamespace + value: litmus + serviceAccountName: argo-chaos + podGC: + strategy: OnWorkflowCompletion + securityContext: + runAsUser: 1000 + runAsNonRoot: true +status: + startedAt: null + finishedAt: null diff --git a/monitoring/tutorials/otel-demo/chaos-exporter-dashboard.json b/monitoring/tutorials/otel-demo/chaos-exporter-dashboard.json new file mode 100644 index 00000000000..0586abffe08 --- /dev/null +++ b/monitoring/tutorials/otel-demo/chaos-exporter-dashboard.json @@ -0,0 +1,647 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "panels": [], + "title": "Chaos Exporter Dashboard", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "fillOpacity": 50, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineWidth": 0, + "spanNulls": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 20, + "x": 0, + "y": 1 + }, + "id": 1, + "options": { + "alignValue": "center", + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "mergeValues": true, + "rowHeight": 0.7, + "showValue": "auto", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.4.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "litmuschaos_experiment_total_duration", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{chaosengine_name}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Chaos Experiments Duration", + "type": "state-timeline" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "format": "short", + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 8 + }, + "id": 2, + "max": 100, + "min": 0, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "litmuschaos_cluster_scoped_experiments_installed_count", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "Total Experiments", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "thresholds": "0,50,100", + "title": "Total Experiments", + "type": "gauge", + "valueMaps": [ + { + "text": "No Data", + "value": "null" + } + ], + "valueName": "current" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-yellow", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "format": "short", + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 8 + }, + "id": 5, + "max": 100, + "min": 0, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(litmuschaos_awaited_experiments)", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "Queued Experiments", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "thresholds": "0,50,100", + "title": "Awaited Experiments", + "type": "gauge", + "valueMaps": [ + { + "text": "No Data", + "value": "null" + } + ], + "valueName": "current" + }, + { + "alert": { + "alertRuleTags": {}, + "conditions": [ + { + "evaluator": { + "params": [ + 0.99 + ], + "type": "gt" + }, + "operator": { + "type": "and" + }, + "query": { + "params": [ + "A", + "5s", + "now" + ] + }, + "reducer": { + "params": [], + "type": "max" + }, + "type": "query" + } + ], + "executionErrorState": "alerting", + "for": "1s", + "frequency": "1s", + "handler": 1, + "message": "Chaos Probe Failed !!!\n\n
\n

Chaos Details:-
\n

    \n
  • Verdict: ${chaosresult_verdict}\n
  • Probe Success %: ${probe_success_percentage}\n
\n

\n

App Details:-
\n

    \n
  • Engine Context: ${chaosengine_context}\n
  • Label: ${app_label}\n
  • Kind: ${app_kind}\n
  • Namespace: ${app_namespace}\n
\n

", + "name": "Chaos Experiment Probe Failure Alerts alert", + "noDataState": "no_data", + "notifications": [] + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Probes failed", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 50, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line+area" + } + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 0.99 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Fail/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E02F44", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsNull", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 10, + "x": 10, + "y": 8 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.5.5", + "targets": [ + { + "datasource": { + "uid": "DS_PROMETHEUS" + }, + "editorMode": "code", + "exemplar": true, + "expr": "litmuschaos_experiment_verdict{probe_success_percentage!=\"100.000000\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "1s", + "legendFormat": "{{app_label}} - {{chaosresult_name}} - {{probe_success_percentage}}", + "refId": "A" + } + ], + "title": "Chaos Experiment Probe Failure Alerts", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "format": "short", + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 14 + }, + "id": 3, + "max": 100, + "min": 0, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(litmuschaos_passed_experiments)", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "Passed Experiments", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "thresholds": "0,50,100", + "title": "Passed Experiments", + "type": "gauge", + "valueMaps": [ + { + "text": "No Data", + "value": "null" + } + ], + "valueName": "current" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-red", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "format": "short", + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 14 + }, + "id": 4, + "max": 100, + "min": 0, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(litmuschaos_failed_experiments)", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "Failed Experiments", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "thresholds": "0,50,100", + "title": "Failed Experiments", + "type": "gauge", + "valueMaps": [ + { + "text": "No Data", + "value": "null" + } + ], + "valueName": "current" + } + ], + "refresh": "5m", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Chaos Experiments Dashboard", + "uid": "chaos-experiments-dashboard", + "version": 3, + "weekStart": "" +} \ No newline at end of file diff --git a/monitoring/tutorials/otel-demo/custom_otel_demo_values.yml b/monitoring/tutorials/otel-demo/custom_otel_demo_values.yml new file mode 100644 index 00000000000..fc3c25d5152 --- /dev/null +++ b/monitoring/tutorials/otel-demo/custom_otel_demo_values.yml @@ -0,0 +1,79 @@ +opentelemetry-collector: + config: + receivers: + otlp: + protocols: + http: + # Since this collector needs to receive data from the web, enable cors for all origins + # `allowed_origins` can be refined for your deployment domain + cors: + allowed_origins: + - "http://*" + - "https://*" + prometheus: + config: + scrape_configs: + - job_name: 'chaos-exporter' + static_configs: + - targets: [ 'chaos-exporter.litmus.svc.cluster.local:8080' ] + relabel_configs: + - target_label: instance + replacement: 'chaos-exporter-service' + httpcheck/frontendproxy: + targets: + - endpoint: 'http://{{ include "otel-demo.name" . }}-frontendproxy:8080' + redis: + endpoint: "valkey-cart:6379" + collection_interval: 10s + + exporters: + ## Create an exporter to Jaeger using the standard `otlp` export format + otlp: + endpoint: '{{ include "otel-demo.name" . }}-jaeger-collector:4317' + tls: + insecure: true + # Create an exporter to Prometheus (metrics) + otlphttp/prometheus: + endpoint: 'http://{{ include "otel-demo.name" . }}-prometheus-server:9090/api/v1/otlp' + tls: + insecure: true + opensearch: + logs_index: otel + http: + endpoint: "http://otel-demo-opensearch:9200" + tls: + insecure: true + + processors: + # This processor is used to help limit high cardinality on next.js span names + # When this PR is merged (and released) we can remove this transform processor + # https://github.com/vercel/next.js/pull/64852 + transform: + error_mode: ignore + trace_statements: + - context: span + statements: + # could be removed when https://github.com/vercel/next.js/pull/64852 is fixed upstream + - replace_pattern(name, "\\?.*", "") + - replace_match(name, "GET /api/products/*", "GET /api/products/{productId}") + resource: + attributes: + - key: service.instance.id + from_attribute: k8s.pod.uid + action: insert + + connectors: + spanmetrics: {} + + service: + pipelines: + traces: + processors: [memory_limiter, resource, transform, batch] + exporters: [otlp, debug, spanmetrics] + metrics: + receivers: [httpcheck/frontendproxy, redis, otlp, spanmetrics, prometheus] + processors: [memory_limiter, resource, batch] + exporters: [otlphttp/prometheus, debug] + logs: + processors: [memory_limiter, resource, batch] + exporters: [opensearch, debug] \ No newline at end of file diff --git a/monitoring/tutorials/otel-demo/recommendation-service/README.md b/monitoring/tutorials/otel-demo/recommendation-service/README.md new file mode 100644 index 00000000000..532ca079ede --- /dev/null +++ b/monitoring/tutorials/otel-demo/recommendation-service/README.md @@ -0,0 +1,27 @@ +# recommendation service pod delete +## Description +- This experiment injects pod delete chaos to the recommendation service pod. +- The Probe checks the Prometheus metrics for the error rate of the ListRecommendations span + - ListRecommendations is included in the frontend service, even though it utilizes the recommendation service. +## Steps +### 1. Probe Settings +- probe type: `Prometheus Probe` +- name: `recommendation-service-pod-delete-probe` +- timeout: 3s +- interval: 3s +- prometheus endpoint: `http://my-otel-demo-prometheus-server.otel-demo:9090` +- prometheus query: `sum(rate(calls_total{status_code=\"STATUS_CODE_ERROR\", span_name=\"grpc.oteldemo.RecommendationService/ListRecommendations\"}[5m]))` +- Data Comparison: + - Type: Float + - Criteria: `<` + - Value: `0.05` +### 2. Make Experiment +1. New Experimnet +2. Complete Overview +3. Start off by Upload YML(recommendation-service-pod-delete.yml) +### 3. Run Experiment +1. Click on the `Run` button +2. Check Experiment Status and Logs +3. Check the Resilience Score +4. Check the Chaos Exporter metrics using Grafana and confirm if the experiment passed. ![recommendation_service_pod_delete_experiment_result_dashboard.png](../screenshots/recommendation_service_pod_delete_experiment_result_dashboard.png) +5. Check Error Rate in frontend service Spanmetrics using Grafana ![frontend_spanmetrics.png](../screenshots/frontend_spanmetrics.png) \ No newline at end of file diff --git a/monitoring/tutorials/otel-demo/recommendation-service/recommendation-service-pod-delete.yml b/monitoring/tutorials/otel-demo/recommendation-service/recommendation-service-pod-delete.yml new file mode 100644 index 00000000000..8d4c38d3a2a --- /dev/null +++ b/monitoring/tutorials/otel-demo/recommendation-service/recommendation-service-pod-delete.yml @@ -0,0 +1,286 @@ +kind: Workflow +apiVersion: argoproj.io/v1alpha1 +metadata: + name: recommendation-service-pod-delete + namespace: litmus + creationTimestamp: null + labels: + infra_id: 5b9be872-6396-4ad1-b64a-ed4b25edd516 + revision_id: fb9618ec-40fa-4a4d-a8b3-a3451da85d06 + workflow_id: cf6dead4-944d-4c86-ba82-b5576ec0ceaf + workflows.argoproj.io/controller-instanceid: 5b9be872-6396-4ad1-b64a-ed4b25edd516 +spec: + templates: + - name: recommendationservice-pod-delete + inputs: {} + outputs: {} + metadata: {} + steps: + - - name: install-chaos-faults + template: install-chaos-faults + arguments: {} + - - name: pod-delete-zkg + template: pod-delete-zkg + arguments: {} + - - name: cleanup-chaos-resources + template: cleanup-chaos-resources + arguments: {} + - name: install-chaos-faults + inputs: + artifacts: + - name: pod-delete-zkg + path: /tmp/pod-delete-zkg.yaml + raw: + data: > + 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: + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + - apiGroups: + - "" + resources: + - events + verbs: + - create + - get + - list + - patch + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - apiGroups: + - "" + resources: + - pods/log + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - pods/exec + verbs: + - get + - list + - create + - apiGroups: + - apps + resources: + - deployments + - statefulsets + - replicasets + - daemonsets + verbs: + - list + - get + - apiGroups: + - apps.openshift.io + resources: + - deploymentconfigs + verbs: + - list + - get + - apiGroups: + - "" + resources: + - replicationcontrollers + verbs: + - get + - list + - apiGroups: + - argoproj.io + resources: + - rollouts + verbs: + - list + - get + - apiGroups: + - batch + resources: + - jobs + verbs: + - create + - list + - get + - delete + - deletecollection + - apiGroups: + - litmuschaos.io + resources: + - chaosengines + - chaosexperiments + - chaosresults + verbs: + - create + - list + - get + - patch + - update + - delete + image: docker.io/litmuschaos/go-runner:latest + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-delete + command: + - /bin/bash + env: + - name: TOTAL_CHAOS_DURATION + value: "15" + - name: RAMP_TIME + value: "" + - name: FORCE + value: "true" + - name: CHAOS_INTERVAL + value: "5" + - name: PODS_AFFECTED_PERC + value: "" + - name: TARGET_CONTAINER + value: "" + - name: TARGET_PODS + value: "" + - name: DEFAULT_HEALTH_CHECK + value: "false" + - name: NODE_LABEL + value: "" + - 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 + outputs: {} + metadata: {} + container: + name: "" + image: litmuschaos/k8s:2.11.0 + command: + - sh + - -c + args: + - kubectl apply -f /tmp/ -n {{workflow.parameters.adminModeNamespace}} + && sleep 30 + resources: {} + - name: cleanup-chaos-resources + inputs: {} + outputs: {} + metadata: {} + container: + name: "" + image: litmuschaos/k8s:2.11.0 + command: + - sh + - -c + args: + - kubectl delete chaosengine -l workflow_run_id={{workflow.uid}} -n + {{workflow.parameters.adminModeNamespace}} + resources: {} + - name: pod-delete-zkg + inputs: + artifacts: + - name: pod-delete-zkg + path: /tmp/chaosengine-pod-delete-zkg.yaml + raw: + data: > + apiVersion: litmuschaos.io/v1alpha1 + + kind: ChaosEngine + + metadata: + namespace: "{{workflow.parameters.adminModeNamespace}}" + labels: + workflow_run_id: "{{ workflow.uid }}" + workflow_name: recommendation-service-pod-delete + annotations: + probeRef: '[{"name":"recommendation-service-pod-delete-probe","mode":"EOT"}]' + generateName: pod-delete-zkg + spec: + appinfo: + appns: otel-demo + applabel: app.kubernetes.io/component=recommendationservice + appkind: deployment + engineState: active + chaosServiceAccount: litmus-admin + experiments: + - name: pod-delete + spec: + components: + env: + - name: TOTAL_CHAOS_DURATION + value: "120" + - name: RAMP_TIME + value: "" + - name: FORCE + value: "true" + - name: CHAOS_INTERVAL + value: "5" + - name: PODS_AFFECTED_PERC + value: "" + - name: TARGET_CONTAINER + value: "" + - name: TARGET_PODS + value: "" + - name: DEFAULT_HEALTH_CHECK + value: "false" + - name: NODE_LABEL + value: "" + - name: SEQUENCE + value: parallel + outputs: {} + metadata: + labels: + weight: "10" + container: + name: "" + image: docker.io/litmuschaos/litmus-checker:2.11.0 + args: + - -file=/tmp/chaosengine-pod-delete-zkg.yaml + - -saveName=/tmp/engine-name + resources: {} + entrypoint: recommendationservice-pod-delete + arguments: + parameters: + - name: adminModeNamespace + value: litmus + serviceAccountName: argo-chaos + podGC: + strategy: OnWorkflowCompletion + securityContext: + runAsUser: 1000 + runAsNonRoot: true +status: + startedAt: null + finishedAt: null diff --git a/monitoring/tutorials/otel-demo/screenshots/cart_service_pod_network_latency_experiment_result_dashboard.png b/monitoring/tutorials/otel-demo/screenshots/cart_service_pod_network_latency_experiment_result_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..54b6a93421e644a9db31d7d99e7f47d8ae367652 GIT binary patch literal 167336 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

t_Y?g;7nX`d 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 JpPf-H-0)O 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 UR^4o*e!g2=x4S%bI`H%V0yN{?Hvj+t literal 0 HcmV?d00001 diff --git a/monitoring/tutorials/otel-demo/screenshots/cartservice_spanmetrics.png b/monitoring/tutorials/otel-demo/screenshots/cartservice_spanmetrics.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1e2b97f9ffe6139cc352fa3f42b532990bbab7 GIT binary patch literal 187696 zcmZU)by!qU7q<tNGMX$EiED-A_xqPfW#0YLw9#6NQ

HFT$R4lqMV4n5=y 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

L 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

#Q?ZVq1&h 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�l**1P9WXM_YR!c} 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 3ySb)Bcmjd*O$i%Dy4X~_h*%)|Cp0g^}i1o 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 Bc#i-8 literal 0 HcmV?d00001 diff --git a/monitoring/tutorials/otel-demo/screenshots/otel_demo_tutorial_architecture.png b/monitoring/tutorials/otel-demo/screenshots/otel_demo_tutorial_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..919cf82e7cd4ce1115d83908fc763f689663b2b6 GIT binary patch literal 1232806 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

  • v4B^=Kx-9yH%&vOM$W|bg z_?@{W{QeNPpLRMT!7r2I;^bk3!ir}B_Ly8kB=Ff~<>WjSI#%XvShV*62@YtFPT7I} zi&xH!=!YF=7M$&R$qR4;|K&9aKA3*)t&;E6_9=GB%r;M$4a!D}|Lm|DGI5hq%Nf`R zMenB%dir{K5lIE{@znG$$2P7?sg2u)&te&QGm zVsA0D4}}Jyl49=y)JOZ^tD8?4%J4U3ffNw8d^6WTbN&U_lJ+w!t31YlUj=DCQM^yd ziyEhjmi^C;?Pc`vZEwc5^*6qE$(8&STf-rTTzOYbHU(YXUFL4uYLylHLmh|V;hqJD0*r&i1Cph2Tz3z(tt|(ET#=yYxu6+ zduA}*QDrpZ9Q?4ZgVMS;l)bMbNpyT{?ESnu{n7-Ig&-9igvi3$tb6eyTEU10JJ7m6 z*6*y21Py-aIO%G^lT^k8S>wf){T)k&{dZz(k;C#m;jVyy0LQ${$#egb)zNLZkZTnO z=@j1ptD?mz$rXo^Wf$-mV zrsB6wN0toAr2Lk4Lp@IGY;EupVFhxD?F^>E&}5~ONlR&{tCB=yM`f5(0EYccb4J0d z`KK_S+5l!^0&I3G!oNtppC9H>@pihL{Ri>js+nCY4x0 zz1R#&ShJY!Zr2Q0%!)AYTC$A4b`zsYGBuk?^8jbbiM?IWm^=^wy@7RUVm3HU{9$d( z@@vM2dI>9Eh;^xZVrw=UD0Xx7`@7UC%^ODxscNmJcHLQlf#9iADuq}L8K45rshgz* z)t4RWP^3=t_xAf{!q9bg3!$;bl)oerFuj;MeFi;lSLQ> z&Ku!D&kKN0E=;=Wo}YouVulFXRhVUXK-5o<*Y9=%JDKGRQP$=Zdj6>!AfP4lfs$`v z91x7tQWHK*bEiJ;8WMoEaQ?P|agGYhzSy;1x2#!_R24>p7d$JCEL2(9iw+flzSyGG z*udJkS+RMQydvg8N+=yMe4~G0z$b8M>JhBeUa5yAsy}}jA8h&4sq*)4Jm|qJga*~l zdUeG`5mPs(3BCr*Kk-oP2!ye$I!;g2zpN9;p+94lSqTs{Po~{bZQLTHyd$ISDyEZX zo`$NflO0^p?m3a9GduQ+ccS`|PNT7ta$@0} zL7VkJLeTT;YtreK_F)QA)1XeRBgwFZwmBm}vlKH2v;ps+pkbw#s_C^rGo*Mj#L%c= zgZkS23zPh&h4+5-#l1OPp||rJm2>V#8fn7Z0~2#6rJHc{6TtX71&!z$>NSVf0LpZN z?>q<0akmDI)Ld9FE6BH?xKQT}tmJ|&Kw^Js{UaNGwU`^-oe`g5vSgI7Jiuz8k#^m{ z*W2%h>O5|TtZBHgtJ!CsrB|QH?x&ue5v3URMuI`U}T% z^XdHT0io3~l}gv@M7(C;vui3UvC!-ptt=U%f>3My881Q�~g7)odj>z-D+qKLH~` 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

    UK_)#DhEn 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 G5}E+4mXaU< literal 0 HcmV?d00001 diff --git a/monitoring/tutorials/otel-demo/screenshots/recommendation_service_pod_delete_experiment_result_dashboard.png b/monitoring/tutorials/otel-demo/screenshots/recommendation_service_pod_delete_experiment_result_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..10ae21b1be284150abce027390fafbea278a2909 GIT binary patch literal 226141 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̀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 Date: Fri, 22 Nov 2024 16:39:08 +0900 Subject: [PATCH 14/14] [Proposal] Support a LitmusChaos Java SDK (#4871) * add litmus java sdk proposal Signed-off-by: Jemin * update java-sdk-proposal Signed-off-by: Jemin * docs: add usecase of sdk Signed-off-by: Jemin --------- Signed-off-by: Jemin Co-authored-by: Namkyu Park <53862866+namkyu1999@users.noreply.github.com> --- proposals/java-sdk.md | 94 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 proposals/java-sdk.md diff --git a/proposals/java-sdk.md b/proposals/java-sdk.md new file mode 100644 index 00000000000..7cb64046ef8 --- /dev/null +++ b/proposals/java-sdk.md @@ -0,0 +1,94 @@ +| title | authors | creation-date | last-updated | +|---------------------|--------------------------------------|---------------|--------------| +| add litmus java sdk | [@jemlog](https://github.com/jemlog) | 2024-09-07 | 2024-09-07 | + +# Adding Litmus Java SDK + +- [Adding Litmus Java SDK](#adding-litmus-java-sdk) + - [Summary](#summary) + - [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Proposal](#proposal) + - [Use Cases](#use-cases) + - [Implementation Details](#implementation-details) + - [Initialize client](#initialize-client) + - [Use Client](#use-client) + - [Risks and Mitigations](#risks-and-mitigations) + - [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) + - [Drawbacks](#drawbacks) + - [Alternatives](#alternatives) + - [References](#references) + +## Summary + +The purpose of litmus-java-sdk is to provide a client that can easily access to auth and backend server of litmus. + +## Motivation + +Litmuschaos’ backend server uses graphQL as an API communication method. +Graphql is not as familiar to developers as REST API, so it is difficult to call backend server directly. +Therefore we planned to add a Java-based SDK that makes developers to communicate easily with litmus backend server. +The SDK also provides an interface to communicate with the auth server to wrap the entire litmus control plane. + +### Goals + +- Add client calling the API for Auth Server +- Add client calling graphQL for Backend Server + + +### Non-Goals + +- Changing APIs that auth server and backend server already provide is non-goal +- Add auto configuration for SpringBoot is non-goal + +## Proposal + +### Use Cases + +In organization, litmusChaos administrators can call java SDK to manage multiple users and projects. + +### Implementation Details + +#### Initialize client + +```java +public void init(){ + + String hostUrl = "http://localhost:3000"; + String username = "admin"; + String password = "litmus"; + + LitmusClient litmusClient = new LitmusClient(hostUrl, username, password); +} +``` +#### Use Client +```java +public void execute(){ + + String projectName = "demo project"; + String description = "demo project description"; + List tags = Arrays.asList("litmus", "chaos"); + + CreateProjectRequest request = CreateProjectRequest.builder() + .projectName("project") + .description("description") + .tags(tags) + .build(); + + CreateProjectResponse response = litmusClient.createProject(request); +} +``` +## Risks and Mitigations + +## Upgrade / Downgrade Strategy + +## Drawbacks + +It will be a great opportunity for administrators of litmusChaos to manage users and conduct experiments more conveniently. + +## Alternatives + +This is the first java sdk we created in Litmus. No other alternatives exist. + +## References

    -4D==I|%+9RCw5B7|^>+X=0 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≫5lc{3C|En08|k5ITg)NzW*)0D~tdb8DS| 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%0A1e6RWA3&VR$ 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

  • 1M3 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 b434c3$9qZUkYP~WW+Q!Fqst_1+Xw#zDmfaZ literal 0 HcmV?d00001 diff --git a/monitoring/tutorials/otel-demo/screenshots/frontend_spanmetrics.png b/monitoring/tutorials/otel-demo/screenshots/frontend_spanmetrics.png new file mode 100644 index 0000000000000000000000000000000000000000..5044ad3333bcd7aede68b4718edd7bbe3c277503 GIT binary patch literal 270156 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