diff --git a/.github/ISSUE_TEMPLATE/maintainer.md b/.github/ISSUE_TEMPLATE/maintainer.md new file mode 100644 index 00000000000..67976b9b746 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/maintainer.md @@ -0,0 +1,33 @@ +--- +name: Organization Maintainer Request +about: Request to become a maintianer in LitmusChaos Org +title: "REQUEST: Promote to maintainer for LitmusChaos" +labels: type/maintainer-request +assignees: "" +--- + +### GitHub Username + +@ + +### Requirements + +- [ ] I have reviewed [the community role guidelines](/community-roles.md) +- [ ] I have [enabled 2FA on my GitHub account](https://github.com/settings/security) +- [ ] I am an active member of 1 or more LitmusChaos subprojects for atleast the last 6 months. +- [ ] I am an active participant in issue/PR reviews for atleast 2 subprojects and for the past 6 months. +- [ ] I have been involved in technical and project discussions with other maintainers. +- [ ] I have atleast one sponsor that meet the sponsor requirements listed in the community role guidelines +- [ ] I have spoken to my sponsor ahead of this application, and they have agreed to sponsor my application +- [ ] I understand that I can [make my membership public](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership) if I'd like to once I am invited to the organization + +### Sponsors + +- @ +- @ + +### List of contributions to the LitmusChaos project + +- PRs reviewed / authored +- Issues responded to +- Projects I am involved with diff --git a/.github/ISSUE_TEMPLATE/member.md b/.github/ISSUE_TEMPLATE/member.md new file mode 100644 index 00000000000..9d2d3a954ca --- /dev/null +++ b/.github/ISSUE_TEMPLATE/member.md @@ -0,0 +1,31 @@ +--- +name: Organization Member Request +about: Request membership in LitmusChaos Org +title: "REQUEST: New member request for " +labels: type/member-request +assignees: "" +--- + +### GitHub Username + +@ + +### Requirements + +- [ ] I have reviewed [the community role guidelines](/community-roles.md) +- [ ] I have [enabled 2FA on my GitHub account](https://github.com/settings/security) +- [ ] I am actively contributing to 1 or more LitmusChaos subprojects +- [ ] I have atleast one sponsor that meet the sponsor requirements listed in the community role guidelines +- [ ] I have spoken to my sponsor ahead of this application, and they have agreed to sponsor my application +- [ ] I understand that I can [make my membership public](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership) if I'd like to once I am invited to the organization + +### Sponsors + +- @ +- @ + +### List of contributions to the LitmusChaos project + +- PRs reviewed / authored +- Issues responded to +- Projects I am involved with diff --git a/.github/ISSUE_TEMPLATE/reviewer.md b/.github/ISSUE_TEMPLATE/reviewer.md new file mode 100644 index 00000000000..ed96057a868 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/reviewer.md @@ -0,0 +1,33 @@ +--- +name: Organization Reviewer Request +about: Request reviewer membership in LitmusChaos Org +title: "REQUEST: Promote to reviewer for LitmusChaos" +labels: type/reviewer-request +assignees: "" +--- + +### GitHub Username + +@ + +### Requirements + +- [ ] I have reviewed [the community role guidelines](/community-roles.md) +- [ ] I have [enabled 2FA on my GitHub account](https://github.com/settings/security) +- [ ] I am an active member of 1 or more LitmusChaos subprojects for atleast the last 3 months. +- [ ] I am an active participant in issue/PR reviews for atleast 1 month. +- [ ] I have reviewed or authored atleast 5 significant PRs. +- [ ] I have atleast one sponsor that meet the sponsor requirements listed in the community role guidelines +- [ ] I have spoken to my sponsor ahead of this application, and they have agreed to sponsor my application +- [ ] I understand that I can [make my membership public](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership) if I'd like to once I am invited to the organization + +### Sponsors + +- @ +- @ + +### List of contributions to the LitmusChaos project + +- PRs reviewed / authored +- Issues responded to +- Projects I am involved with diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 4422e001205..3f151a9fc85 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -32,7 +32,7 @@ jobs: sanitizer: ${{ matrix.sanitizer }} output-sarif: true - name: Upload Crash - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() && steps.build.outcome == 'success' with: name: ${{ matrix.sanitizer }}-artifacts diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index a5097807f53..9c09e85fd1c 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -2,6 +2,7 @@ name: Litmus-CI on: issue_comment: types: [created] + push: branches: - master @@ -16,9 +17,7 @@ jobs: - uses: octokit/request-action@v2.x id: get_PR_commits with: - route: GET /repos/:repo/pulls/:pull_number/commits - repo: ${{ github.repository }} - pull_number: ${{ github.event.issue.number }} + route: GET /repos/${{ github.repository }}/pull_number/${{ github.event.issue.number }}/commits env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -77,7 +76,7 @@ jobs: directory: ${{ matrix.path }} - name: upload docker artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: Docker-Images path: Images @@ -111,7 +110,7 @@ jobs: kubectl get pods -n kube-system - name: download docker artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: Docker-Images path: Images diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index f43195373d1..8fe96a5cce5 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -63,7 +63,7 @@ jobs: # echo export DEX_SERVER="litmusportal-dex-server" >> env-vars - name: Uploading envs - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: env_artifact path: chaoscenter/env-vars @@ -78,7 +78,7 @@ jobs: uses: actions/checkout@v4 - name: Downloading image artficate - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: env_artifact path: chaoscenter @@ -116,7 +116,7 @@ jobs: uses: actions/checkout@v4 - name: Downloading image artficate - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: env_artifact path: chaoscenter @@ -154,7 +154,7 @@ jobs: uses: actions/checkout@v4 - name: Downloading image artficate - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: env_artifact path: chaoscenter @@ -192,7 +192,7 @@ jobs: uses: actions/checkout@v4 - name: Downloading image artficate - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: env_artifact path: chaoscenter @@ -243,7 +243,7 @@ jobs: uses: actions/checkout@v4 - name: Downloading image artficate - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: env_artifact path: chaoscenter @@ -279,4 +279,4 @@ jobs: source env-vars FRONTEND_IMAGE=${{ matrix.frontend.image_name }} timestamp=`date "+%s"` - make push-frontend \ No newline at end of file + make push-frontend diff --git a/ADOPTERS.md b/ADOPTERS.md index 61ca4083ee0..1f1bda7f18a 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -1,86 +1,86 @@ -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)| - +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/emirates-nbd.md) | +| [PokerBaazi](https://www.pokerbaazi.com/) | Chaos Engineering for Online Gaming | [Our Story](adopters/organizations/pokerbaazi.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/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 diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 095cc76a98f..edee7839c30 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -1,130 +1,79 @@ # LitmusChaos Project Governance +This document outlines the governance structure for the LitmusChaos project, a CNCF Incubating project. It describes the roles, responsibilities, decision-making processes, and mechanisms for community involvement. + We abide by the [Code of Conduct](./CODE_OF_CONDUCT.md) for all the projects maintained under the LitmusChaos Organization. For specific guidance on practical contribution steps for any LitmusChaos sub-project please -see our [CONTRIBUTING.md](./CONTRIBUTING.md) guide and the sub-project specific contributing guides +see our [CONTRIBUTING.md](./CONTRIBUTING.md) guide and the sub-project specific contributing guides in the respective GitHub repositories. -## Maintainership - -There are different types of maintainers, with different responsibilities, but -all maintainers have 3 things in common: - -1) They share responsibility in the project's success. -2) They have made a long-term, recurring time investment to improve the project. -3) They spend that time doing whatever needs to be done, not necessarily what -is the most interesting or fun. - -Maintainers are often under-appreciated, because their work is harder to appreciate. -It's easy to appreciate a really cool and technically advanced feature. It's harder -to appreciate the absence of bugs, the slow but steady improvement in stability, -or the reliability of a release process. But those things distinguish a great -project from a good one. - -## Reviewers +## Roles and Membership -A reviewer is a core role within the project. -They share in reviewing issues and pull requests and their LGTM counts towards the -required LGTM count to merge a code change into the project. +Roles and their responsibilities are detailed in the [Community Membership](./community-roles.md) document. -Reviewers are part of the organization but do not have write access. -Becoming a reviewer is a core aspect in the journey to becoming a maintainer. +The list of current maintainers and their organizational affiliations is maintained in the [MAINTAINERS.md](./MAINTAINERS.md) file. -## Adding maintainers +## Conflict Resolution and Voting -Maintainers are first and foremost contributors that have shown they are -committed to the long term success of a project. Contributors wanting to become -maintainers are expected to be deeply involved in contributing code, pull -request review, and triage of issues in the project for more than three months. +Most issues within the project are resolved by consensus. When consensus cannot be reached, a voting process is initiated. All decisions are documented publicly, either in GitHub or in meeting notes. -Just contributing does not make you a maintainer, it is about building trust -with the current maintainers of the project and being a person that they can -depend on and trust to make decisions in the best interest of the project. - -Periodically, the existing maintainers curate a list of contributors that have -shown regular activity on the project over the prior months. From this list, -candidates are selected and proposed as maintainers. - -After a candidate has been proposed as maintainer via a Pull Request by any of -the existing maintainers, the other maintainers are given five business days -to discuss the candidate, raise objections and cast their vote. -The Votes take place via the pull request comment. Candidates must be approved by at -least 66% of the current maintainers by adding their vote on the mailing list. -The reviewer role has the same process but only requires 33% of current maintainers. -Only maintainers of the repository that the candidate is proposed for are allowed to -vote. The candidate becomes a maintainer once the pull request is merged. - -## Adding sub-projects +### Voting Process -Similar to adding maintainers, new sub projects can be added to LitmusChaos -GitHub organization as long as they adhere to the LitmusChaos vision and mission. -New projects are discussed in either the Contributor Meeting or the Community -slack and requires at least 1 maintainer approval. +- **Threshold:** A vote passes with a simple majority. +- **Quorum:** At least 30% of maintainers must participate in the vote. +- **Voting Method:** Votes are cast by adding +1 or -1 to the associated GitHub issue or PR. +- **Binding Votes:** Each maintainer has one binding vote. Non-binding votes from the community are encouraged. +- **Organizational Limit:** No single organization can cast more than 40% of the eligible votes. Organizations with more than 40% of maintainers must designate voting members. +- **Duration:** Voting remains open for one week. -If a project is approved, a maintainer will add the project to the LitmusChaos -GitHub organization, and make an announcement on a public forum. +## How are decisions made? -## Stepping down policy +LitmusChaos is an open-source project with an open design philosophy. This means +that the repository is the source of truth for EVERY aspect of the project, +including its philosophy, design, road map, and APIs. _If it's part of the +project, it's in the repo. If it's in the repo, it's part of the project._ -Life priorities, interests, and passions can change. If you're a maintainer but -feel you must remove yourself from the list, inform other maintainers that you -intend to step down, and if possible, help find someone to pick up your work. -At the very least, ensure your work can be continued where you left off. +As a result, all decisions can be expressed as changes to the repository. An +implementation change is a change to the source code. An API change is a change +to the API specification. A philosophy change is a change to the philosophy +manifesto, and so on. -After you've informed other maintainers, create a pull request to remove -yourself from the MAINTAINERS file. +All decisions affecting LitmusChaos, big and small, follow the same 3 steps: -## Removal of inactive maintainers +- Step 1: Open a pull request. Anyone can do this. +- Step 2: Discuss the pull request. Anyone can do this. +- Step 3: Merge or refuse the pull request. Who does this depends on the nature + of the pull request and which areas of the project it affects. -Similar to the procedure for adding new maintainers, existing maintainers can -be removed from the list if they do not show significant activity on the -project. Periodically, the maintainers review the list of maintainers and their -activity over the last three months. +## Decision-Making Process -If a maintainer has shown insufficient activity over this period, a neutral -person will contact the maintainer to ask if they want to continue being -a maintainer. If the maintainer decides to step down as a maintainer, they -open a pull request to be removed from the MAINTAINERS file. +Most decisions are made through consensus. If consensus cannot be reached, maintainers may initiate a vote. -## Emeritus maintainers +### Voting -For committers who are stepping down or being removed due to inactivity, -the project would like to memorialize their contributions to the project by -recognizing them as Emeritus maintainers in the EMERITUS.md file. The EMERITUS.md -file will include a brief paragraph summarizing their contribution to the -containerd project and recognize them as permanent Emeritus members of the -community. While Emeritus maintainers are not active in the project, their -expertise is always valued and their LGTM may count towards the required LGTM -count to merge a code change into the project. +- **Threshold:** A vote passes with a simple majority. +- **Quorum:** At least 30% of maintainers must participate in the vote. +- **Method:** Votes are cast using +1 (approve) or -1 (reject) in the relevant GitHub PR or issue. +- **Duration:** Voting remains open for one week. -If in the future an Emeritus maintainer has the desire or ability to return to -contributing to the project, Emeritus maintainers can submit a pull request -reversing their removal from the MAINTAINERS file and approval only requires -2 LGTMs from current committers to return to full committer status in the -project. +## Community Support and Transparency +LitmusChaos aims for full transparency and inclusion in all governance activities. All decisions are made publicly and documented in the GitHub repositories or public meetings. -## How are decisions made? +### Recurring Public Meetings -LitmusChaos is an open-source project with an open design philosophy. This means -that the repository is the source of truth for EVERY aspect of the project, -including its philosophy, design, road map, and APIs. *If it's part of the -project, it's in the repo. If it's in the repo, it's part of the project.* +- #### Maintainers and Contributors Meeting -As a result, all decisions can be expressed as changes to the repository. An -implementation change is a change to the source code. An API change is a change -to the API specification. A philosophy change is a change to the philosophy -manifesto, and so on. + Covers technical issues, future milestones, and roadmaps. Also focused on governance, membership, and the future direction of the project. -All decisions affecting LitmusChaos, big and small, follow the same 3 steps: +- #### Community Meeting -* Step 1: Open a pull request. Anyone can do this. + Engages end users and the community with project updates, user presentations, and open discussions. -* Step 2: Discuss the pull request. Anyone can do this. +- #### Meeting Calendar -* Step 3: Merge or refuse the pull request. Who does this depends on the nature -of the pull request and which areas of the project it affects. + Please fill [this invite form](https://forms.gle/AsuXB2hbTG2TyD2d9) to be added to the calendar ## Helping contributors with the DCO @@ -148,10 +97,12 @@ When you add someone's DCO, please also add your own to keep a log. Yes. Nobody should ever push to master directly. All changes should be made through a pull request. -## Conflict Resolution +## Adding sub-projects + +Similar to adding maintainers, new sub projects can be added to LitmusChaos +GitHub organization as long as they adhere to the LitmusChaos vision and mission. +New projects are discussed in either the Contributor Meeting or the Community +slack and requires at least 1 maintainer approval. -If you have a technical dispute that you feel has reached an impasse with a -subset of the community, any contributor may open an issue, specifically -calling for a resolution vote of the current maintainers to resolve the dispute. -The same voting quorums required (2/3) for adding and removing maintainers -will apply to conflict resolution. +If a project is approved, a maintainer will add the project to the LitmusChaos +GitHub organization, and make an announcement on a public forum. diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 69c831f39a5..0c7d354886f 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,3 +1,8 @@ +# LitmusChaos Maintainers + +- [GOVERNANCE.md](./GOVERNANCE.md) describes the LitmusChaos governance. +- [community-roles.md](./community-roles.md) describes the responsibilities and requirements on the project roles. + ### Component-Wise Code Owners & Primary Reviewers Area |Components |Source |Maintainers |Reviewers| @@ -12,10 +17,10 @@ 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 +### Consolidated Maintainers List ``` "Amit Kumar Das",@amityt,amit.das@harness.io @@ -36,6 +41,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 Kumar",@hrishavjha,hrishav.kumar@harness.io ``` ### Consolidated Reviewers List @@ -43,9 +51,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 @@ -61,4 +66,4 @@ websites |project website, chaoshub, documentation |litmus-website, cha "Amit Bhatt",@amitbhatt818,amit.bhatt@mayadata.io,MayaData "Ishan Gupta",@ishangupta-ds,ishan@chaosnative.com,ChaosNative "Rahul M Chheda",@rahulchheda,rahul.chheda1997@gmail.com,Independent -``` +``` \ No newline at end of file diff --git a/README.md b/README.md index 02b16845624..d6890591929 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/3202/badge)](https://www.bestpractices.dev/projects/3202) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Flitmuschaos%2Flitmus.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Flitmuschaos%2Flitmus?ref=badge_shield) [![YouTube Channel](https://img.shields.io/badge/YouTube-Subscribe-red)](https://www.youtube.com/channel/UCa57PMqmz_j0wnteRa9nCaw) +[![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20LitmusChaos%20Guru-006BFF)](https://gurubase.io/g/litmuschaos)



#### *Read this in [other languages](translations/TRANSLATIONS.md).* @@ -105,9 +106,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) @@ -129,7 +139,6 @@ Fill out the [LitmusChaos Meetings invite form](https://forms.gle/xYZyZ2gTWMqz7x Community Blogs: -- Daniyal Rayn: [Do I need Chaos Engineering on my environment? Trust me you need it!](https://maveric-systems.com/blog/do-i-need-chaos-engineering-on-my-environment-trust-me-you-need-it/) - LiveWyer: [LitmusChaos Showcase: Chaos Experiments in a Helm Chart Test Suite](https://livewyer.io/blog/2021/03/22/litmuschaos-showcase-chaos-experiments-in-a-helm-chart-test-suite/) - Jessica Cherry: [Test Kubernetes cluster failures and experiments in your terminal](https://opensource.com/article/21/6/kubernetes-litmus-chaos) - Yang Chuansheng(KubeSphere): [KubeSphere 部署 Litmus 至 Kubernetes 开启混沌实验](https://kubesphere.io/zh/blogs/litmus-kubesphere/) @@ -138,8 +147,6 @@ Community Blogs: - Akram Riahi(WeScale):[Chaos Engineering : Litmus sous tous les angles](https://blog.wescale.fr/2021/03/11/chaos-engineering-litmus-sous-tous-les-angles/) - Prashanto Priyanshu(LensKart):[Lenskart’s approach to Chaos Engineering-Part 2](https://blog.lenskart.com/lenskarts-approach-to-chaos-engineering-part-2-6290e4f3a74e) - DevsDay.ru(Russian):[LitmusChaos at Kubecon EU '21](https://devsday.ru/blog/details/40746) -- Ryan Pei(Armory): [LitmusChaos in your Spinnaker Pipeline](https://www.armory.io/blog/litmuschaos-in-your-spinnaker-pipeline/) -- David Gildeh(Zebrium): [Using Autonomous Monitoring with Litmus Chaos Engine on Kubernetes](https://www.zebrium.com/blog/using-autonomous-monitoring-with-litmus-chaos-engine-on-kubernetes) ## Adopters 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 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. diff --git a/adopters/organizations/pokerbaazi.md b/adopters/organizations/pokerbaazi.md new file mode 100644 index 00000000000..820579263fc --- /dev/null +++ b/adopters/organizations/pokerbaazi.md @@ -0,0 +1,32 @@ +## PokerBaazi + +[PokerBaazi](https://www.pokerbaazi.com/) is India's biggest online poker platform providing an unparalleled world-class experience. Home Grown and 8 years of calling it our own, today, we have a strong and loyal user base of 40 LAC+ Indians. + +### **Applications/Workloads or Infra that are being subjected to chaos by Litmus.** + +At PokerBaazi, we leverage Litmus Chaos to subject critical components of our infrastructure to controlled chaos experiments. These include: + +- Microservices Infrastructure: Our backend is designed as a microservices architecture, running on Kubernetes. We conduct experiments on inter-service communication, API latencies, and service resilience during node failures or resource constraints. +- Load Balancers and Networking: We simulate disruptions in networking, such as packet drops or DNS failures, to ensure our applications maintain connectivity and continue serving users. +- Application Workloads: High-demand applications like our gaming engine and payment/promotions api's are put under stress to evaluate their fault tolerance and recovery mechanisms during peak loads or unexpected outages. + +### **Why do we use Litmus.** + +We chose Litmus Chaos for several compelling reasons: + +- Kubernetes-Native Integration: Since our infrastructure is heavily Kubernetes-based, Litmus seamlessly integrates with our stack, making it a natural fit. +- Ease of Use and Open-Source: Litmus offers a user-friendly interface along with robust documentation, allowing our teams to adopt it quickly without steep learning curves. +- Custom Experiment Support: The ability to create tailored chaos experiments aligned with our specific workloads ensures we can target critical failure scenarios unique to our ecosystem. +- Community Support and Scalability: Being an open-source project with an active community, Litmus evolves rapidly, allowing us to leverage the latest chaos engineering methodologies and tools. + +Litmus has been instrumental in identifying hidden weaknesses in our system, such as unexpected dependencies or cascading failures. This has enabled us to proactively address potential issues, enhance system resilience, and meet our uptime commitments. + +### **Where are we using Litmus.** + +We use Litmus Chaos in various environments to ensure robust testing at every stage of development: + +- Development: Initial chaos experiments are conducted in isolated dev environments to identify basic resilience issues and ensure service fault tolerance during early-stage development. +- Staging/Pre-Production: In staging, we run more comprehensive chaos scenarios simulating real-world failures, such as pod crashes, resource exhaustion, or external API downtime, to ensure the production-like environment is resilient. +- Production: Selected, low-risk chaos experiments are conducted in production under strict supervision to verify real-time system robustness and validate SLAs in live conditions. + +Litmus Chaos has transformed our approach to building and maintaining a highly resilient gaming platform, allowing us to deliver exceptional user experiences while preparing for the unexpected. diff --git a/adopters/organizations/wingie-enuygun.md b/adopters/organizations/wingie-enuygun.md new file mode 100644 index 00000000000..7a6c1ed2f1c --- /dev/null +++ b/adopters/organizations/wingie-enuygun.md @@ -0,0 +1,11 @@ +# Wingie Enuygun Company +[Wingie Enuygun Company](https://www.wingie.com/) is a leading travel and technology company providing seamless travel solutions across various platforms. + +## Why do we use Litmus +We use Litmus to identify bottlenecks in our systems, detect issues early, and foresee potential errors. This allows us to take proactive measures and maintain the resilience and performance of our infrastructure. + +## How do we use Litmus +Litmus is integrated into our QA cycles, where it plays a crucial role in catching bugs and verifying the overall resilience of our systems. + +## Benefits in using Litmus +Litmus chaos experiments are straightforward to implement and can be easily customized or extended to meet our specific requirements, enabling us to effectively manage and optimize our systems at Wingie Enuygun. diff --git a/chaoscenter/authentication/DOC_SETUP.md b/chaoscenter/authentication/DOC_SETUP.md index e1b0b495859..81b383e63bc 100644 --- a/chaoscenter/authentication/DOC_SETUP.md +++ b/chaoscenter/authentication/DOC_SETUP.md @@ -97,7 +97,7 @@ type ErrServerError struct { After annotating your API and defining your responses, run the following command in your project root to generate the `swagger.yaml` file: ```bash -swag init +swag init --parseDependency true ``` This command scans your project and creates a Swagger specification from your annotations. diff --git a/chaoscenter/authentication/Dockerfile b/chaoscenter/authentication/Dockerfile index fa6db11dab0..c074a9bdf04 100644 --- a/chaoscenter/authentication/Dockerfile +++ b/chaoscenter/authentication/Dockerfile @@ -16,7 +16,7 @@ RUN CGO_ENABLED=0 go build -o /output/server -v ./api/ # Packaging stage # Use RedHat UBI minimal image as base -FROM registry.access.redhat.com/ubi9/ubi-minimal:9.4 +FROM registry.access.redhat.com/ubi9/ubi-minimal:9.5 LABEL maintainer="LitmusChaos" diff --git a/chaoscenter/authentication/api/docs/docs.go b/chaoscenter/authentication/api/docs/docs.go deleted file mode 100644 index 73c8be438cc..00000000000 --- a/chaoscenter/authentication/api/docs/docs.go +++ /dev/null @@ -1,1372 +0,0 @@ -// Package docs Code generated by swaggo/swag. DO NOT EDIT -package docs - -import "github.com/swaggo/swag" - -const docTemplate = `{ - "schemes": {{ marshal .Schemes }}, - "swagger": "2.0", - "info": { - "description": "{{escape .Description}}", - "title": "{{.Title}}", - "contact": {}, - "version": "{{.Version}}" - }, - "host": "{{.Host}}", - "basePath": "{{.BasePath}}", - "paths": { - "/accept_invitation": { - "post": { - "description": "Accept inviation to a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Accept invitaion.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/capabilities": { - "get": { - "description": "Returns capabilities that can be leveraged by frontend services to toggle certain features.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CapabilitiesRouter" - ], - "summary": "Get capabilities of Auth Server.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.CapabilitiesResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/create_project": { - "post": { - "description": "Create a new project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Create project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/create_token": { - "post": { - "description": "Creates a new api token for the user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.NewApiToken" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrUserNotFound" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/create_user": { - "post": { - "description": "Create new user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidEmail" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUserExists" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/decline_invitation": { - "post": { - "description": "Deecline invitation to a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Decline invitation.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/dex/callback": { - "get": { - "description": "DexRouter creates all the required routes for OAuth purposes. .", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DexRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/dex/login": { - "get": { - "description": "DexRouter creates all the required routes for OAuth purposes. .", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DexRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_owner_projects": { - "get": { - "description": "Return owner of projects.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get projects owner.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_project_members/:project_id/:state": { - "get": { - "description": "Return list of active project members.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get active project members.", - "parameters": [ - { - "type": "string", - "description": "State", - "name": "state", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_project_role/:project_id": { - "get": { - "description": "Return role of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get project Role.", - "parameters": [ - { - "type": "integer", - "description": "Project ID", - "name": "project_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrProjectNotFound" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_projects_stats": { - "get": { - "description": "Return stats of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get stats of a project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_user/:uid": { - "get": { - "description": "Get user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrUserNotFound" - } - } - } - } - }, - "/invite_users/:project_id": { - "get": { - "description": "Invite users.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/leave_project": { - "post": { - "description": "Leave project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Leave project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/list_invitations_with_filters/:invitation_state": { - "get": { - "description": "Return list of invitations.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "List invitations.", - "parameters": [ - { - "type": "string", - "description": "Invitation State", - "name": "invitation_state", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/list_projects": { - "get": { - "description": "Return stats of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get stats of a project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/login": { - "post": { - "description": "User Login.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.LoginResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidCredentials" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/logout": { - "post": { - "description": "Revokes the token passed in the Authorization header.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/readiness": { - "get": { - "description": "Return list of tags.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "MiscRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/remove_invitation": { - "post": { - "description": "Remove invitation of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Remove invitation.", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "obejct" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/remove_token": { - "post": { - "description": "Delete api token for the user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/reset/password": { - "post": { - "description": "Reset user password.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrStrictPasswordPolicyViolation" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/send_invitation": { - "post": { - "description": "Send invitation to a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Send invitation.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrUserNotFound" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/status": { - "get": { - "description": "Status will request users list and return, if successful, an http code 200.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "MiscRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/token/:uid": { - "post": { - "description": "Returns all the api tokens for the user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.ApiTokenResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/update/details": { - "post": { - "description": "Update users details.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrStrictUsernamePolicyViolation" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/update/password": { - "post": { - "description": "Update user password.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrOldPassword" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrInvalidCredentials" - } - } - } - } - }, - "/update/state": { - "post": { - "description": "Updates the user state.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - } - } - } - }, - "/update_project_name": { - "post": { - "description": "Return updated project name.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Update project name.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/users": { - "get": { - "description": "Fetch users.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - } - }, - "definitions": { - "response.ApiTokenResponse": { - "type": "object", - "properties": { - "createdAt": { - "type": "integer" - }, - "expiresAt": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "token": { - "type": "string" - }, - "userID": { - "type": "string" - } - } - }, - "response.CapabilitiesResponse": { - "type": "object", - "properties": { - "dex": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "response.ErrInvalidCredentials": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "Invalid Credentials" - } - } - }, - "response.ErrInvalidEmail": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "Email address is invalid" - } - } - }, - "response.ErrInvalidRequest": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed" - } - } - }, - "response.ErrInvalidRole": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "Role is invalid" - } - } - }, - "response.ErrOldPassword": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "The old and new passwords can't be same" - } - } - }, - "response.ErrProjectNotFound": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "This project does not exist" - } - } - }, - "response.ErrServerError": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 500 - }, - "message": { - "type": "string", - "example": "The authorization server encountered an unexpected condition that prevented it from fulfilling the request" - } - } - }, - "response.ErrStrictPasswordPolicyViolation": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "Please ensure the password is atleast 8 characters and atmost 16 characters long and has atleast 1 digit, 1 lowercase alphabet, 1 uppercase alphabet and 1 special character" - } - } - }, - "response.ErrStrictUsernamePolicyViolation": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "The username should be atleast 3 characters long and atmost 16 characters long." - } - } - }, - "response.ErrUnauthorized": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "The user does not have requested authorization to access this resource" - } - } - }, - "response.ErrUserDeactivated": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "your account has been deactivated" - } - } - }, - "response.ErrUserExists": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "This username is already assigned to another user" - } - } - }, - "response.ErrUserNotFound": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "user does not exist" - } - } - }, - "response.LoginResponse": { - "type": "object" - }, - "response.MessageResponse": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - }, - "response.NewApiToken": { - "type": "object" - }, - "response.Response": { - "type": "object", - "properties": { - "response": { - "type": "string" - } - } - }, - "response.UserResponse": { - "type": "object", - "properties": { - "deactivatedAt": { - "type": "integer" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - }, - "password": { - "type": "string" - }, - "role": { - "type": "string" - }, - "userID": { - "type": "string" - }, - "username": { - "type": "string" - } - } - } - } -}` - -// SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = &swag.Spec{ - Version: "", - Host: "", - BasePath: "", - Schemes: []string{}, - Title: "Chaoscenter API documentation", - Description: "", - InfoInstanceName: "swagger", - SwaggerTemplate: docTemplate, - LeftDelim: "{{", - RightDelim: "}}", -} - -func init() { - swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) -} diff --git a/chaoscenter/authentication/api/docs/swagger.json b/chaoscenter/authentication/api/docs/swagger.json deleted file mode 100644 index 189ff56e185..00000000000 --- a/chaoscenter/authentication/api/docs/swagger.json +++ /dev/null @@ -1,1344 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "Chaoscenter API documentation", - "contact": {} - }, - "paths": { - "/accept_invitation": { - "post": { - "description": "Accept inviation to a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Accept invitaion.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/capabilities": { - "get": { - "description": "Returns capabilities that can be leveraged by frontend services to toggle certain features.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CapabilitiesRouter" - ], - "summary": "Get capabilities of Auth Server.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.CapabilitiesResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/create_project": { - "post": { - "description": "Create a new project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Create project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/create_token": { - "post": { - "description": "Creates a new api token for the user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.NewApiToken" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrUserNotFound" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/create_user": { - "post": { - "description": "Create new user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidEmail" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUserExists" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/decline_invitation": { - "post": { - "description": "Deecline invitation to a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Decline invitation.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/dex/callback": { - "get": { - "description": "DexRouter creates all the required routes for OAuth purposes. .", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DexRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/dex/login": { - "get": { - "description": "DexRouter creates all the required routes for OAuth purposes. .", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DexRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_owner_projects": { - "get": { - "description": "Return owner of projects.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get projects owner.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_project_members/:project_id/:state": { - "get": { - "description": "Return list of active project members.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get active project members.", - "parameters": [ - { - "type": "string", - "description": "State", - "name": "state", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_project_role/:project_id": { - "get": { - "description": "Return role of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get project Role.", - "parameters": [ - { - "type": "integer", - "description": "Project ID", - "name": "project_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrProjectNotFound" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_projects_stats": { - "get": { - "description": "Return stats of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get stats of a project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/get_user/:uid": { - "get": { - "description": "Get user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrUserNotFound" - } - } - } - } - }, - "/invite_users/:project_id": { - "get": { - "description": "Invite users.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/leave_project": { - "post": { - "description": "Leave project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Leave project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/list_invitations_with_filters/:invitation_state": { - "get": { - "description": "Return list of invitations.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "List invitations.", - "parameters": [ - { - "type": "string", - "description": "Invitation State", - "name": "invitation_state", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/list_projects": { - "get": { - "description": "Return stats of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Get stats of a project.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/login": { - "post": { - "description": "User Login.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.LoginResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidCredentials" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/logout": { - "post": { - "description": "Revokes the token passed in the Authorization header.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/readiness": { - "get": { - "description": "Return list of tags.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "MiscRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/remove_invitation": { - "post": { - "description": "Remove invitation of a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Remove invitation.", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "obejct" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/remove_token": { - "post": { - "description": "Delete api token for the user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/reset/password": { - "post": { - "description": "Reset user password.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrStrictPasswordPolicyViolation" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/send_invitation": { - "post": { - "description": "Send invitation to a project.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Send invitation.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrUserNotFound" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/status": { - "get": { - "description": "Status will request users list and return, if successful, an http code 200.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "MiscRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/token/:uid": { - "post": { - "description": "Returns all the api tokens for the user.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.ApiTokenResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/update/details": { - "post": { - "description": "Update users details.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrStrictUsernamePolicyViolation" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/update/password": { - "post": { - "description": "Update user password.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrOldPassword" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrInvalidCredentials" - } - } - } - } - }, - "/update/state": { - "post": { - "description": "Updates the user state.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.MessageResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - } - } - } - }, - "/update_project_name": { - "post": { - "description": "Return updated project name.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "ProjectRouter" - ], - "summary": "Update project name.", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/response.ErrInvalidRequest" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - }, - "/users": { - "get": { - "description": "Fetch users.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "UserRouter" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/response.UserResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/response.ErrUnauthorized" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/response.ErrServerError" - } - } - } - } - } - }, - "definitions": { - "response.ApiTokenResponse": { - "type": "object", - "properties": { - "createdAt": { - "type": "integer" - }, - "expiresAt": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "token": { - "type": "string" - }, - "userID": { - "type": "string" - } - } - }, - "response.CapabilitiesResponse": { - "type": "object", - "properties": { - "dex": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "response.ErrInvalidCredentials": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "Invalid Credentials" - } - } - }, - "response.ErrInvalidEmail": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "Email address is invalid" - } - } - }, - "response.ErrInvalidRequest": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed" - } - } - }, - "response.ErrInvalidRole": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "Role is invalid" - } - } - }, - "response.ErrOldPassword": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "The old and new passwords can't be same" - } - } - }, - "response.ErrProjectNotFound": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "This project does not exist" - } - } - }, - "response.ErrServerError": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 500 - }, - "message": { - "type": "string", - "example": "The authorization server encountered an unexpected condition that prevented it from fulfilling the request" - } - } - }, - "response.ErrStrictPasswordPolicyViolation": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "Please ensure the password is atleast 8 characters and atmost 16 characters long and has atleast 1 digit, 1 lowercase alphabet, 1 uppercase alphabet and 1 special character" - } - } - }, - "response.ErrStrictUsernamePolicyViolation": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "The username should be atleast 3 characters long and atmost 16 characters long." - } - } - }, - "response.ErrUnauthorized": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "The user does not have requested authorization to access this resource" - } - } - }, - "response.ErrUserDeactivated": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "your account has been deactivated" - } - } - }, - "response.ErrUserExists": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 401 - }, - "message": { - "type": "string", - "example": "This username is already assigned to another user" - } - } - }, - "response.ErrUserNotFound": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "example": 400 - }, - "message": { - "type": "string", - "example": "user does not exist" - } - } - }, - "response.LoginResponse": { - "type": "object" - }, - "response.MessageResponse": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - }, - "response.NewApiToken": { - "type": "object" - }, - "response.Response": { - "type": "object", - "properties": { - "response": { - "type": "string" - } - } - }, - "response.UserResponse": { - "type": "object", - "properties": { - "deactivatedAt": { - "type": "integer" - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - }, - "password": { - "type": "string" - }, - "role": { - "type": "string" - }, - "userID": { - "type": "string" - }, - "username": { - "type": "string" - } - } - } - } -} \ No newline at end of file diff --git a/chaoscenter/authentication/api/handlers/doc.go b/chaoscenter/authentication/api/handlers/doc.go index 81574f08513..7336517f7c3 100644 --- a/chaoscenter/authentication/api/handlers/doc.go +++ b/chaoscenter/authentication/api/handlers/doc.go @@ -1,6 +1,9 @@ package response -import "github.com/gin-gonic/gin" +import ( + "github.com/gin-gonic/gin" + "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/entities" +) type Response struct { Response string @@ -32,7 +35,7 @@ type CapabilitiesResponse struct { } type MessageResponse struct { - Message string + Message string `json:"message"` } type NewApiToken struct { @@ -134,3 +137,53 @@ type ErrProjectNotFoundstruct struct { Code int `json:"code" example:"400"` Message string `json:"message" example:"project does not exist"` } + +type ReadinessAPIStatus struct { + DataBase string `json:"database"` + Collections string `json:"collections"` +} + +type APIStatus struct { + Status string `json:"status"` +} + +type UserWithProject struct { + Data entities.UserWithProject `json:"data"` +} + +type Project struct { + Data entities.Project `json:"data"` +} + +type Projects struct { + Data []*entities.Project `json:"data"` +} + +type ListProjectResponse struct { + Data entities.ListProjectResponse `json:"data"` +} + +type ProjectStats struct { + Data []*entities.ProjectStats `json:"data"` +} + +type Members struct { + Data []*entities.Member `json:"data"` +} + +type Member struct { + Data entities.Member `json:"data"` +} + +type ListInvitationResponse struct { + Data []entities.ListInvitationResponse `json:"data"` +} + +type ProjectRole struct { + Role string `json:"role"` +} + +type ProjectIDWithMessage struct { + Message string `json:"message"` + ProjectID string `json:"projectID"` +} diff --git a/chaoscenter/authentication/api/handlers/rest/capabilities_handler.go b/chaoscenter/authentication/api/handlers/rest/capabilities_handler.go index 9fea792b8c5..f9eca4bfa13 100644 --- a/chaoscenter/authentication/api/handlers/rest/capabilities_handler.go +++ b/chaoscenter/authentication/api/handlers/rest/capabilities_handler.go @@ -16,6 +16,8 @@ import ( // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.CapabilitiesResponse{} // @Router /capabilities [get] +// +// GetCapabilities returns the capabilities of the Auth Server. func GetCapabilities() gin.HandlerFunc { return func(c *gin.Context) { capabilities := new(response.CapabilitiesResponse) diff --git a/chaoscenter/authentication/api/handlers/rest/misc_handlers.go b/chaoscenter/authentication/api/handlers/rest/misc_handlers.go index fb9e73bb121..7c5d60e8718 100644 --- a/chaoscenter/authentication/api/handlers/rest/misc_handlers.go +++ b/chaoscenter/authentication/api/handlers/rest/misc_handlers.go @@ -3,7 +3,7 @@ package rest import ( "net/http" - "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/entities" + response "github.com/litmuschaos/litmus/chaoscenter/authentication/api/handlers" "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/services" "github.com/gin-gonic/gin" @@ -20,32 +20,26 @@ func contains(s []string, str string) bool { return false } -type ReadinessAPIStatus struct { - DataBase string `json:"database"` - Collections string `json:"collections"` -} - // Status godoc // -// @Description Status will request users list and return, if successful, an http code 200. +// @Description Status will request users list and return, if successful, a http code 200. // @Tags MiscRouter // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.APIStatus{} // @Router /status [get] // -// Status will request users list and return, if successful, -// an http code 200 +// Status will request users list and return, if successful, a http code 200 func Status(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { _, err := service.GetUsers() if err != nil { log.Error(err) - c.JSON(http.StatusInternalServerError, entities.APIStatus{Status: "down"}) + c.JSON(http.StatusInternalServerError, response.APIStatus{Status: "down"}) return } - c.JSON(http.StatusOK, entities.APIStatus{Status: "up"}) + c.JSON(http.StatusOK, response.APIStatus{Status: "up"}) } } @@ -56,37 +50,39 @@ func Status(service services.ApplicationService) gin.HandlerFunc { // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.ReadinessAPIStatus{} // @Router /readiness [get] +// +// Readiness will return the status of the database and collections func Readiness(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { var ( - db_flag = "up" - col_flag = "up" + dbFlag = "up" + colFlag = "up" ) dbs, err := service.ListDataBase() if !contains(dbs, "auth") { - db_flag = "down" + dbFlag = "down" } if err != nil { log.Error(err) - c.JSON(http.StatusInternalServerError, ReadinessAPIStatus{"down", "unknown"}) + c.JSON(http.StatusInternalServerError, response.ReadinessAPIStatus{DataBase: "down", Collections: "unknown"}) return } cols, err := service.ListCollection() if !contains(cols, "project") || !contains(cols, "users") { - col_flag = "down" + colFlag = "down" } if err != nil { log.Error(err) - c.JSON(http.StatusInternalServerError, ReadinessAPIStatus{db_flag, "down"}) + c.JSON(http.StatusInternalServerError, response.ReadinessAPIStatus{DataBase: dbFlag, Collections: "down"}) return } - c.JSON(http.StatusOK, ReadinessAPIStatus{db_flag, col_flag}) + c.JSON(http.StatusOK, response.ReadinessAPIStatus{DataBase: dbFlag, Collections: colFlag}) } } diff --git a/chaoscenter/authentication/api/handlers/rest/project_handler.go b/chaoscenter/authentication/api/handlers/rest/project_handler.go index 8ebe227df8b..d3736f503eb 100644 --- a/chaoscenter/authentication/api/handlers/rest/project_handler.go +++ b/chaoscenter/authentication/api/handlers/rest/project_handler.go @@ -1,12 +1,14 @@ package rest import ( + "errors" "net/http" "time" + response "github.com/litmuschaos/litmus/chaoscenter/authentication/api/handlers" "github.com/litmuschaos/litmus/chaoscenter/authentication/api/presenter" "github.com/litmuschaos/litmus/chaoscenter/authentication/api/types" - project_utils "github.com/litmuschaos/litmus/chaoscenter/authentication/api/utils" + projectUtils "github.com/litmuschaos/litmus/chaoscenter/authentication/api/utils" "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/entities" "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/services" "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/utils" @@ -20,8 +22,9 @@ import ( ) // GetUserWithProject godoc +// // @Summary Get user with project. -// @Description Return users who has a project. +// @Description Return users who have a project. // @Tags ProjectRouter // @Param username path string true "Username" // @Accept json @@ -29,16 +32,16 @@ import ( // @Failure 401 {object} response.ErrUnauthorized // @Failure 400 {object} response.ErrUserNotFound // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.UserWithProject{} // @Router /get_user_with_project/:username [get] - +// // GetUserWithProject returns user and project details based on username func GetUserWithProject(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { username := c.Param("username") - // Validating logged in user - // Must be either requesting info from the logged in user + // Validating logged-in user + // Must be either requesting info from the logged-in user // or any user if it has the admin role role := c.MustGet("role").(string) if c.MustGet("username").(string) != username && role != string(entities.RoleAdmin) { @@ -55,29 +58,30 @@ func GetUserWithProject(service services.ApplicationService) gin.HandlerFunc { return } - request := project_utils.GetProjectFilters(c) + request := projectUtils.GetProjectFilters(c) request.UserID = user.ID - response, err := service.GetProjectsByUserID(request) + res, err := service.GetProjectsByUserID(request) if err != nil { log.Error(err) c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return } - outputUser := &entities.UserWithProject{ + outputUser := entities.UserWithProject{ Username: user.Username, ID: user.ID, Email: user.Email, Name: user.Name, - Projects: response.Projects, + Projects: res.Projects, } - c.JSON(http.StatusOK, gin.H{"data": outputUser}) + c.JSON(http.StatusOK, response.UserWithProject{Data: outputUser}) } } // GetProject godoc +// // @Summary Get user with project. // @Description Return a project. // @Tags ProjectRouter @@ -86,9 +90,9 @@ func GetUserWithProject(service services.ApplicationService) gin.HandlerFunc { // @Produce json // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.Project{} // @Router /get_project/:project_id [get] - +// // GetProject queries the project with a given projectID from the database func GetProject(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { @@ -113,7 +117,7 @@ func GetProject(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{"data": project}) + c.JSON(http.StatusOK, response.Project{Data: *project}) } } @@ -125,19 +129,20 @@ func GetProject(service services.ApplicationService) gin.HandlerFunc { // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.ListProjectResponse{} // @Router /list_projects [get] // // GetProjectsByUserID queries the project with a given userID from the database and returns it in the appropriate format func GetProjectsByUserID(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { - request := project_utils.GetProjectFilters(c) + request := projectUtils.GetProjectFilters(c) - response, err := service.GetProjectsByUserID(request) - if response == nil || (response.TotalNumberOfProjects != nil && *response.TotalNumberOfProjects == 0) { + res, err := service.GetProjectsByUserID(request) + if res == nil || (res.TotalNumberOfProjects != nil && *res.TotalNumberOfProjects == 0) { c.JSON(http.StatusOK, gin.H{ "message": "No projects found", }) + return } if err != nil { log.Error(err) @@ -145,7 +150,7 @@ func GetProjectsByUserID(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{"data": response}) + c.JSON(http.StatusOK, response.ListProjectResponse{Data: *res}) } } @@ -157,10 +162,10 @@ func GetProjectsByUserID(service services.ApplicationService) gin.HandlerFunc { // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.ProjectStats{} // @Router /get_projects_stats [get] // -// GetProjectStats is used to retrive stats related to projects in the DB +// GetProjectStats is used to retrieve stats related to projects in the DB func GetProjectStats(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { role := c.MustGet("role").(string) @@ -180,7 +185,7 @@ func GetProjectStats(service services.ApplicationService) gin.HandlerFunc { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return } - c.JSON(http.StatusOK, gin.H{"data": project}) + c.JSON(http.StatusOK, response.ProjectStats{Data: project}) } } @@ -193,8 +198,10 @@ func GetProjectStats(service services.ApplicationService) gin.HandlerFunc { // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.Members{} // @Router /get_project_members/:project_id/:state [get] +// +// GetActiveProjectMembers returns the list of active project members func GetActiveProjectMembers(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { projectID := c.Param("project_id") @@ -216,7 +223,7 @@ func GetActiveProjectMembers(service services.ApplicationService) gin.HandlerFun c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return } - c.JSON(http.StatusOK, gin.H{"data": members}) + c.JSON(http.StatusOK, response.Members{Data: members}) } } @@ -229,8 +236,10 @@ func GetActiveProjectMembers(service services.ApplicationService) gin.HandlerFun // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.Members{} // @Router /get_project_owners/:project_id/:state [get] +// +// GetActiveProjectOwners returns the list of active project owners func GetActiveProjectOwners(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { projectID := c.Param("project_id") @@ -239,7 +248,7 @@ func GetActiveProjectOwners(service services.ApplicationService) gin.HandlerFunc c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return } - c.JSON(http.StatusOK, gin.H{"data": owners}) + c.JSON(http.StatusOK, response.Members{Data: owners}) } } @@ -267,7 +276,7 @@ func getInvitation(service services.ApplicationService, member entities.MemberIn // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.ListInvitationResponse{} // @Router /list_invitations_with_filters/:invitation_state [get] // // ListInvitations returns the Invitation status @@ -275,7 +284,7 @@ func ListInvitations(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { uID := c.MustGet("uid").(string) invitationState := c.Param("invitation_state") - var response []entities.ListInvitationResponse + var res []entities.ListInvitationResponse projects, err := service.ListInvitations(uID, entities.Invitation(invitationState)) if err != nil { log.Errorf("Error while fetching invitations: %v", err) @@ -294,9 +303,9 @@ func ListInvitations(service services.ApplicationService) gin.HandlerFunc { inviteRes.InvitationRole = member.Role } } - response = append(response, inviteRes) + res = append(res, inviteRes) } - c.JSON(http.StatusOK, gin.H{"data": response}) + c.JSON(http.StatusOK, response.ListInvitationResponse{Data: res}) } } @@ -308,8 +317,10 @@ func ListInvitations(service services.ApplicationService) gin.HandlerFunc { // @Accept json // @Produce json // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.Project{} // @Router /create_project [post] +// +// CreateProject is used to create a new project func CreateProject(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { var userRequest entities.CreateProjectInput @@ -325,8 +336,12 @@ func CreateProject(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, userRequest.UserID) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } // checking if project name is empty @@ -410,7 +425,7 @@ func CreateProject(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{"data": newProject.GetProjectOutput()}) + c.JSON(http.StatusOK, response.Project{Data: *newProject.GetProjectOutput()}) } @@ -428,11 +443,10 @@ func CreateProject(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRole // @Failure 400 {object} response.ErrUserNotFound // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.Member{} // @Router /send_invitation [post] // -// SendInvitation sends an invitation to a new user and -// returns an error if the member is already part of the project +// SendInvitation sends an invitation to a new user and returns an error if the member is already part of the project func SendInvitation(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { var member entities.MemberInput @@ -456,8 +470,12 @@ func SendInvitation(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, c.MustGet("uid").(string)) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } // Validating member role @@ -468,7 +486,7 @@ func SendInvitation(service services.ApplicationService) gin.HandlerFunc { user, err := service.GetUser(member.UserID) - if err == mongo.ErrNoDocuments { + if errors.Is(err, mongo.ErrNoDocuments) { c.JSON(utils.ErrorStatusCodes[utils.ErrUserNotFound], presenter.CreateErrorResponse(utils.ErrUserNotFound)) return } else if err != nil { @@ -478,7 +496,7 @@ func SendInvitation(service services.ApplicationService) gin.HandlerFunc { } invitation, err := getInvitation(service, member) - if err == mongo.ErrNoDocuments { + if errors.Is(err, mongo.ErrNoDocuments) { c.JSON(utils.ErrorStatusCodes[utils.ErrProjectNotFound], presenter.CreateErrorResponse(utils.ErrProjectNotFound)) return } else if err != nil { @@ -518,7 +536,7 @@ func SendInvitation(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{"data": entities.Member{ + c.JSON(http.StatusOK, response.Member{Data: entities.Member{ UserID: user.ID, Username: user.Username, Name: user.Name, @@ -532,15 +550,15 @@ func SendInvitation(service services.ApplicationService) gin.HandlerFunc { // AcceptInvitation godoc // -// @Summary Accept invitaion. -// @Description Accept inviation to a project. +// @Summary Accept invitation. +// @Description Accept invitation to a project. // @Tags ProjectRouter // @Accept json // @Produce json // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.MessageResponse{} // @Router /accept_invitation [post] // // AcceptInvitation is used to accept an invitation @@ -558,8 +576,12 @@ func AcceptInvitation(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, c.MustGet("uid").(string)) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } err = validations.RbacValidator(c.MustGet("uid").(string), member.ProjectID, @@ -580,23 +602,21 @@ func AcceptInvitation(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Successful", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "Successful"}) } } // DeclineInvitation godoc // // @Summary Decline invitation. -// @Description Deecline invitation to a project. +// @Description Decline invitation to a project. // @Tags ProjectRouter // @Accept json // @Produce json // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.MessageResponse{} // @Router /decline_invitation [post] // // DeclineInvitation is used to decline an invitation @@ -614,8 +634,12 @@ func DeclineInvitation(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, c.MustGet("uid").(string)) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } err = validations.RbacValidator(c.MustGet("uid").(string), member.ProjectID, @@ -636,9 +660,7 @@ func DeclineInvitation(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Successful", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "successful"}) } } @@ -652,7 +674,7 @@ func DeclineInvitation(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.MessageResponse{} // @Router /leave_project [post] // // LeaveProject is used to leave a project @@ -684,8 +706,12 @@ func LeaveProject(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, c.MustGet("uid").(string)) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } err = validations.RbacValidator(c.MustGet("uid").(string), member.ProjectID, @@ -706,9 +732,7 @@ func LeaveProject(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Successful", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "successful"}) } } @@ -722,7 +746,7 @@ func LeaveProject(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {obejct} response.Response{} +// @Success 200 {object} response.MessageResponse{} // @Router /remove_invitation [post] // // RemoveInvitation removes member or cancels invitation @@ -744,8 +768,12 @@ func RemoveInvitation(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, c.MustGet("uid").(string)) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } err = validations.RbacValidator(c.MustGet("uid").(string), member.ProjectID, @@ -790,9 +818,7 @@ func RemoveInvitation(service services.ApplicationService) gin.HandlerFunc { } } - c.JSON(http.StatusOK, gin.H{ - "message": "Successful", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "successful"}) } } @@ -806,7 +832,7 @@ func RemoveInvitation(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.MessageResponse{} // @Router /update_project_name [post] // // UpdateProjectName is used to update a project's name @@ -824,8 +850,12 @@ func UpdateProjectName(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, c.MustGet("uid").(string)) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } err = validations.RbacValidator(c.MustGet("uid").(string), @@ -861,9 +891,7 @@ func UpdateProjectName(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Successful", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "successful"}) } } @@ -877,7 +905,7 @@ func UpdateProjectName(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.MessageResponse{} // @Router /update_member_role [post] // // UpdateMemberRole is used to update a member role in the project @@ -922,9 +950,7 @@ func UpdateMemberRole(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Successfully updated Role", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "successful"}) } } @@ -938,7 +964,7 @@ func UpdateMemberRole(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Failure 401 {object} response.ErrUnauthorized // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.Projects{} // @Router /get_owner_projects [get] // // GetOwnerProjects returns an array of projects in which user is an owner @@ -952,9 +978,7 @@ func GetOwnerProjects(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "data": res, - }) + c.JSON(http.StatusOK, response.Projects{Data: res}) } } @@ -969,7 +993,7 @@ func GetOwnerProjects(service services.ApplicationService) gin.HandlerFunc { // @Produce json // @Failure 400 {object} response.ErrProjectNotFound // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} +// @Success 200 {object} response.ProjectRole{} // @Router /get_project_role/:project_id [get] // // GetProjectRole returns the role of a user in the project @@ -981,7 +1005,7 @@ func GetProjectRole(service services.ApplicationService) gin.HandlerFunc { res, err := service.GetProjectRole(projectID, uid) if err != nil { log.Error(err) - if err == mongo.ErrNoDocuments { + if errors.Is(err, mongo.ErrNoDocuments) { c.JSON(utils.ErrorStatusCodes[utils.ErrProjectNotFound], presenter.CreateErrorResponse(utils.ErrProjectNotFound)) return } @@ -992,9 +1016,7 @@ func GetProjectRole(service services.ApplicationService) gin.HandlerFunc { if res != nil { role = string(*res) } - c.JSON(http.StatusOK, gin.H{ - "role": role, - }) + c.JSON(http.StatusOK, response.ProjectRole{Role: role}) } } @@ -1007,8 +1029,8 @@ func GetProjectRole(service services.ApplicationService) gin.HandlerFunc { // @Produce json // @Failure 400 {object} response.ErrProjectNotFound // @Failure 500 {object} response.ErrServerError -// @Success 200 {object} response.Response{} -// @Router /delete_project/{project_id} [post] +// @Success 200 {object} response.MessageResponse{} +// @Router /delete_project/:project_id [post] // // DeleteProject is used to delete a project. func DeleteProject(service services.ApplicationService) gin.HandlerFunc { @@ -1034,8 +1056,6 @@ func DeleteProject(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "Successfully deleted project.", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "Successfully deleted project."}) } } diff --git a/chaoscenter/authentication/api/handlers/rest/user_handlers.go b/chaoscenter/authentication/api/handlers/rest/user_handlers.go index 3d81dc22d54..5bd787e239e 100644 --- a/chaoscenter/authentication/api/handlers/rest/user_handlers.go +++ b/chaoscenter/authentication/api/handlers/rest/user_handlers.go @@ -1,10 +1,12 @@ package rest import ( + "errors" "net/http" "strings" "time" + response "github.com/litmuschaos/litmus/chaoscenter/authentication/api/handlers" "github.com/litmuschaos/litmus/chaoscenter/authentication/api/presenter" "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/entities" "github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/services" @@ -34,6 +36,8 @@ const BearerSchema = "Bearer " // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.UserResponse{} // @Router /create_user [post] +// +// CreateUser creates a new user func CreateUser(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { userRole := c.MustGet("role").(string) @@ -94,7 +98,7 @@ func CreateUser(service services.ApplicationService) gin.HandlerFunc { userRequest.CreatedAt = createdAt userResponse, err := service.CreateUser(&userRequest) - if err == utils.ErrUserExists { + if errors.Is(err, utils.ErrUserExists) { log.Error(err) c.JSON(utils.ErrorStatusCodes[utils.ErrUserExists], presenter.CreateErrorResponse(utils.ErrUserExists)) return @@ -121,6 +125,8 @@ func CreateUser(service services.ApplicationService) gin.HandlerFunc { // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.MessageResponse{} // @Router /update/details [post] +// +// UpdateUser updates the user details func UpdateUser(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { var userRequest entities.UserDetails @@ -136,15 +142,20 @@ func UpdateUser(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, uid) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } err = service.UpdateUser(&userRequest) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) + return } - c.JSON(http.StatusOK, gin.H{"message": "User details updated successfully"}) + c.JSON(http.StatusOK, response.MessageResponse{Message: "User details updated successfully"}) } } @@ -163,8 +174,8 @@ func GetUser(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { uid := c.Param("uid") - // Validating logged in user - // Must be either requesting info from the logged in user + // Validating logged-in user + // Must be either requesting info from the logged-in user // or any user if it has the admin role role := c.MustGet("role").(string) if c.MustGet("uid").(string) != uid && role != string(entities.RoleAdmin) { @@ -194,6 +205,8 @@ func GetUser(service services.ApplicationService) gin.HandlerFunc { // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.UserResponse{} // @Router /users [get] +// +// FetchUsers fetches all the users func FetchUsers(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { userRole := c.MustGet("role").(string) @@ -222,6 +235,8 @@ func FetchUsers(service services.ApplicationService) gin.HandlerFunc { // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.UserResponse{} // @Router /invite_users/:project_id [get] +// +// InviteUsers invites users to the project func InviteUsers(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { projectID := c.Param("project_id") @@ -240,11 +255,11 @@ func InviteUsers(service services.ApplicationService) gin.HandlerFunc { projectMembers, err := service.GetProjectMembers(projectID, "all") - var uids []string + var userIds []string for _, k := range projectMembers { - uids = append(uids, k.UserID) + userIds = append(userIds, k.UserID) } - users, err := service.InviteUsers(uids) + users, err := service.InviteUsers(userIds) if err != nil { log.Error(err) c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) @@ -263,10 +278,12 @@ func InviteUsers(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Failure 400 {object} response.ErrUserNotFound // @Failure 400 {object} response.ErrUserDeactivated -// @Failure 400 {object} response.ErrInvalidCredentials +// @Failure 401 {object} response.ErrInvalidCredentials // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.LoginResponse{} // @Router /login [post] +// +// LoginUser returns the token for the user if the credentials are valid func LoginUser(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { var userRequest entities.User @@ -402,9 +419,7 @@ func LogoutUser(service services.ApplicationService) gin.HandlerFunc { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return } - c.JSON(http.StatusOK, gin.H{ - "message": "successfully logged out", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "successfully logged out"}) } } @@ -418,8 +433,10 @@ func LogoutUser(service services.ApplicationService) gin.HandlerFunc { // @Failure 401 {object} response.ErrStrictPasswordPolicyViolation // @Failure 400 {object} response.ErrOldPassword // @Failure 401 {object} response.ErrInvalidCredentials -// @Success 200 {object} response.MessageResponse{} +// @Success 200 {object} response.ProjectIDWithMessage{} // @Router /update/password [post] +// +// UpdatePassword updates the user password func UpdatePassword(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { var userPasswordRequest entities.UserPassword @@ -510,10 +527,8 @@ func UpdatePassword(service services.ApplicationService) gin.HandlerFunc { } defaultProject = newProject.ID } - c.JSON(http.StatusOK, gin.H{ - "message": "password has been updated successfully", - "projectID": defaultProject, - }) + c.JSON(http.StatusOK, response.ProjectIDWithMessage{Message: "password has been updated successfully", ProjectID: defaultProject}) + } } @@ -529,6 +544,8 @@ func UpdatePassword(service services.ApplicationService) gin.HandlerFunc { // @Failure 500 {object} response.ErrServerError // @Success 200 {object} response.MessageResponse{} // @Router /reset/password [post] +// +// ResetPassword resets the user password func ResetPassword(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { userRole := c.MustGet("role").(string) @@ -554,8 +571,12 @@ func ResetPassword(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, uid) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } if userPasswordRequest.NewPassword != "" { @@ -582,9 +603,7 @@ func ResetPassword(service services.ApplicationService) gin.HandlerFunc { c.AbortWithStatusJSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return } - c.JSON(http.StatusOK, gin.H{ - "message": "password has been reset successfully", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "password has been reset successfully"}) } } @@ -598,6 +617,8 @@ func ResetPassword(service services.ApplicationService) gin.HandlerFunc { // @Failure 400 {object} response.ErrInvalidRequest // @Success 200 {object} response.MessageResponse{} // @Router /update/state [post] +// +// UpdateUserState updates the user state func UpdateUserState(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { @@ -610,8 +631,12 @@ func UpdateUserState(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, adminUser.ID) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } if entities.Role(userRole) != entities.RoleAdmin { @@ -647,9 +672,7 @@ func UpdateUserState(service services.ApplicationService) gin.HandlerFunc { return } - c.JSON(http.StatusOK, gin.H{ - "message": "user's state updated successfully", - }) + c.JSON(http.StatusOK, response.MessageResponse{Message: "user's state updated successfully"}) } } @@ -676,8 +699,8 @@ func CreateApiToken(service services.ApplicationService) gin.HandlerFunc { return } - // Validating logged in user - // Requesting info must be from the logged in user + // Validating logged-in user + // Requesting info must be from the logged-in user if c.MustGet("uid").(string) != apiTokenRequest.UserID { log.Error("auth error: unauthorized") c.JSON(utils.ErrorStatusCodes[utils.ErrUnauthorized], @@ -689,8 +712,12 @@ func CreateApiToken(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, apiTokenRequest.UserID) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } // Checking if user exists @@ -729,8 +756,8 @@ func GetApiTokens(service services.ApplicationService) gin.HandlerFunc { return func(c *gin.Context) { uid := c.Param("uid") - // Validating logged in user - // Requesting info must be from the logged in user + // Validating logged-in user + // Requesting info must be from the logged-in user if c.MustGet("uid").(string) != uid { log.Error("auth error: unauthorized") c.JSON(utils.ErrorStatusCodes[utils.ErrUnauthorized], @@ -772,8 +799,8 @@ func DeleteApiToken(service services.ApplicationService) gin.HandlerFunc { return } - // Validating logged in user - // Requesting info must be from the logged in user + // Validating logged-in user + // Requesting info must be from the logged-in user if c.MustGet("uid").(string) != deleteApiTokenRequest.UserID { log.Error("auth error: unauthorized") c.JSON(utils.ErrorStatusCodes[utils.ErrUnauthorized], @@ -785,8 +812,12 @@ func DeleteApiToken(service services.ApplicationService) gin.HandlerFunc { initialLogin, err := CheckInitialLogin(service, deleteApiTokenRequest.UserID) if err != nil { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) - } else if initialLogin { + return + } + + if initialLogin { c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrPasswordNotUpdated)) + return } token := deleteApiTokenRequest.Token @@ -800,10 +831,8 @@ func DeleteApiToken(service services.ApplicationService) gin.HandlerFunc { log.Error(err) c.JSON(utils.ErrorStatusCodes[utils.ErrServerError], presenter.CreateErrorResponse(utils.ErrServerError)) return - } else { - c.JSON(http.StatusOK, gin.H{ - "message": "api token deleted successfully", - }) } + + c.JSON(http.StatusOK, response.MessageResponse{Message: "api token deleted successfully"}) } } diff --git a/chaoscenter/authentication/go.mod b/chaoscenter/authentication/go.mod index 93f0224f064..5b7a0d4b88c 100644 --- a/chaoscenter/authentication/go.mod +++ b/chaoscenter/authentication/go.mod @@ -12,10 +12,10 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 github.com/swaggo/swag v1.16.3 - go.mongodb.org/mongo-driver v1.15.1 - golang.org/x/crypto v0.25.0 - golang.org/x/oauth2 v0.20.0 - google.golang.org/grpc v1.65.0 + go.mongodb.org/mongo-driver v1.17.1 + golang.org/x/crypto v0.31.0 + golang.org/x/oauth2 v0.21.0 + google.golang.org/grpc v1.66.2 google.golang.org/protobuf v1.34.2 ) @@ -36,7 +36,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang/snappy v0.0.1 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.0 // indirect @@ -46,7 +46,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/montanaflynn/stats v0.7.1 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect @@ -56,14 +56,14 @@ require ( github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect - github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/chaoscenter/authentication/go.sum b/chaoscenter/authentication/go.sum index cf461a3ba2f..2b3ba537a77 100644 --- a/chaoscenter/authentication/go.sum +++ b/chaoscenter/authentication/go.sum @@ -44,8 +44,8 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -79,8 +79,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -116,18 +116,18 @@ github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.mongodb.org/mongo-driver v1.15.1 h1:l+RvoUOoMXFmADTLfYDm7On9dRm7p4T80/lEQM+r7HU= -go.mongodb.org/mongo-driver v1.15.1/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= +go.mongodb.org/mongo-driver v1.17.1 h1:Wic5cJIwJgSpBhe3lx3+/RybR5PiYRMpVFgO7cOHyIM= +go.mongodb.org/mongo-driver v1.17.1/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= @@ -137,16 +137,16 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -156,16 +156,16 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -174,10 +174,10 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= +google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/chaoscenter/authentication/pkg/entities/user.go b/chaoscenter/authentication/pkg/entities/user.go index fb65c112e2c..0070ce6edeb 100644 --- a/chaoscenter/authentication/pkg/entities/user.go +++ b/chaoscenter/authentication/pkg/entities/user.go @@ -49,11 +49,6 @@ type UpdateUserState struct { IsDeactivate *bool `json:"isDeactivate"` } -// APIStatus defines structure for APIroute status -type APIStatus struct { - Status string `json:"status"` -} - type UserWithProject struct { Audit `bson:",inline"` ID string `bson:"_id" json:"id"` diff --git a/chaoscenter/authentication/pkg/project/repository.go b/chaoscenter/authentication/pkg/project/repository.go index 8f170b8967f..0fd8a0db75a 100644 --- a/chaoscenter/authentication/pkg/project/repository.go +++ b/chaoscenter/authentication/pkg/project/repository.go @@ -60,7 +60,7 @@ func (r repository) GetProjects(query bson.D) ([]*entities.Project, error) { return nil, err } - var projects []*entities.Project + var projects = []*entities.Project{} err = results.All(context.TODO(), &projects) if err != nil { return nil, err @@ -71,7 +71,7 @@ func (r repository) GetProjects(query bson.D) ([]*entities.Project, error) { // GetProjectsByUserID returns a project based on the userID func (r repository) GetProjectsByUserID(request *entities.ListProjectRequest) (*entities.ListProjectResponse, error) { - var projects []*entities.Project + var projects = []*entities.Project{} ctx := context.TODO() // Construct the pipeline @@ -184,7 +184,7 @@ func (r repository) GetProjectStats() ([]*entities.ProjectStats, error) { return nil, err } - var data []*entities.ProjectStats + var data = []*entities.ProjectStats{} for result.Next(context.TODO()) { res := entities.ProjectStats{} if err := result.Decode(&res); err != nil { @@ -425,7 +425,7 @@ func (r repository) GetOwnerProjects(ctx context.Context, userID string) ([]*ent return nil, err } - var projects []*entities.Project + var projects = []*entities.Project{} err = cursor.All(context.TODO(), &projects) if err != nil { return nil, err @@ -447,7 +447,7 @@ func (r repository) GetProjectOwners(projectID string) ([]*entities.Member, erro } // Filter the members to include only the owners - var owners []*entities.Member + var owners = []*entities.Member{} for _, member := range project.Members { if member.Role == entities.RoleOwner && member.Invitation == entities.AcceptedInvitation { owners = append(owners, member) @@ -615,7 +615,7 @@ func (r repository) ListInvitations(userID string, invitationState entities.Invi return nil, err } - var projects []*entities.Project + var projects = []*entities.Project{} err = cursor.All(context.TODO(), &projects) if err != nil { return nil, err diff --git a/chaoscenter/authentication/pkg/session/api_token_repository.go b/chaoscenter/authentication/pkg/session/api_token_repository.go index 7cc28a6962c..b7973bf5d93 100644 --- a/chaoscenter/authentication/pkg/session/api_token_repository.go +++ b/chaoscenter/authentication/pkg/session/api_token_repository.go @@ -23,7 +23,7 @@ func (r repository) CreateApiToken(apiToken *entities.ApiToken) error { // GetApiTokensByUserID returns all the API tokens for a given user func (r repository) GetApiTokensByUserID(userID string) ([]entities.ApiToken, error) { - var apiTokens []entities.ApiToken + var apiTokens = []entities.ApiToken{} query := bson.D{ {Key: "user_id", Value: userID}, } diff --git a/chaoscenter/authentication/pkg/user/repository.go b/chaoscenter/authentication/pkg/user/repository.go index 2782826609c..e6d7fc5df02 100644 --- a/chaoscenter/authentication/pkg/user/repository.go +++ b/chaoscenter/authentication/pkg/user/repository.go @@ -78,7 +78,7 @@ func (r repository) GetUser(uid string) (*entities.User, error) { // GetUsers fetches all the users from the database func (r repository) GetUsers() (*[]entities.User, error) { - var Users []entities.User + var Users = []entities.User{} cursor, err := r.Collection.Find(context.Background(), bson.M{}) if err != nil { return nil, err diff --git a/chaoscenter/authentication/pkg/utils/configs.go b/chaoscenter/authentication/pkg/utils/configs.go index 16aa0356aa7..962b3893b78 100644 --- a/chaoscenter/authentication/pkg/utils/configs.go +++ b/chaoscenter/authentication/pkg/utils/configs.go @@ -29,7 +29,7 @@ var ( CaCertPath = os.Getenv("CA_CERT_TLS_PATH") RestPort = os.Getenv("REST_PORT") GrpcPort = os.Getenv("GRPC_PORT") - DBName = "auth" + DBName = getEnvAsString("DB_NAME", "auth") UserCollection = "users" ProjectCollection = "project" AuthConfigCollection = "auth-config" @@ -37,12 +37,19 @@ var ( ApiTokenCollection = "api-token" UsernameField = "username" ExpiresAtField = "expires_at" - PasswordEncryptionCost = 15 + PasswordEncryptionCost = 8 DefaultLitmusGqlGrpcEndpoint = "localhost" DefaultLitmusGqlGrpcPort = ":8000" //DefaultLitmusGqlGrpcPortHttps = ":8001" // enable when in use ) +func getEnvAsString(name string, defaultVal string) string { + if value := os.Getenv(name); value != "" { + return value + } + return defaultVal +} + func getEnvAsInt(name string, defaultVal int) int { valueStr := os.Getenv(name) if value, err := strconv.Atoi(valueStr); err == nil { diff --git a/chaoscenter/authentication/pkg/utils/sanitizers.go b/chaoscenter/authentication/pkg/utils/sanitizers.go index df9c4d936a0..817ec4684a9 100644 --- a/chaoscenter/authentication/pkg/utils/sanitizers.go +++ b/chaoscenter/authentication/pkg/utils/sanitizers.go @@ -16,7 +16,7 @@ func SanitizeString(input string) string { /* ValidateStrictPassword represents and checks for the following patterns: - Input is at least 8 characters long and at most 16 characters long -- Input contains at least one special character of these @$!%*?_& +- Input contains at least one special character of these @$!%*?_&# - Input contains at least one digit - Input contains at least one uppercase alphabet - Input contains at least one lowercase alphabet @@ -33,7 +33,7 @@ func ValidateStrictPassword(input string) error { digits := `[0-9]{1}` lowerAlphabets := `[a-z]{1}` capitalAlphabets := `[A-Z]{1}` - specialCharacters := `[@$!%*?_&]{1}` + specialCharacters := `[@$!%*?_&#]{1}` if b, err := regexp.MatchString(digits, input); !b || err != nil { return fmt.Errorf("password does not contain digits") } diff --git a/chaoscenter/event-tracker/Dockerfile b/chaoscenter/event-tracker/Dockerfile index b6cee80d97d..bee216f4929 100644 --- a/chaoscenter/event-tracker/Dockerfile +++ b/chaoscenter/event-tracker/Dockerfile @@ -17,7 +17,7 @@ RUN CGO_ENABLED=0 go build -o /output/event-tracker -v # Packaging stage # Use RedHat UBI minimal image as base -FROM registry.access.redhat.com/ubi9/ubi-minimal:9.4 +FROM registry.access.redhat.com/ubi9/ubi-minimal:9.5 LABEL maintainer="LitmusChaos" diff --git a/chaoscenter/graphql/definitions/shared/chaos_experiment.graphqls b/chaoscenter/graphql/definitions/shared/chaos_experiment.graphqls index 0323301850a..b6003ab121b 100644 --- a/chaoscenter/graphql/definitions/shared/chaos_experiment.graphqls +++ b/chaoscenter/graphql/definitions/shared/chaos_experiment.graphqls @@ -715,7 +715,7 @@ type GetExperimentStatsResponse { totalExpCategorizedByResiliencyScore: [ResilienceScoreCategory]! } -extend type Query { +type Query { """ @@ -737,7 +737,7 @@ extend type Query { getExperimentStats(projectID: ID!): GetExperimentStatsResponse! } -extend type Mutation { +type Mutation { """ Creates a new experiment and applies its manifest """ diff --git a/chaoscenter/graphql/definitions/shared/chaos_infrastructure.graphqls b/chaoscenter/graphql/definitions/shared/chaos_infrastructure.graphqls index d0c2b4b5a5c..467a6a2da76 100644 --- a/chaoscenter/graphql/definitions/shared/chaos_infrastructure.graphqls +++ b/chaoscenter/graphql/definitions/shared/chaos_infrastructure.graphqls @@ -358,11 +358,11 @@ type KubeObjectResponse { """ Type of the Kubernetes object """ - kubeObj: [KubeObject]! + kubeObj: KubeObject! } """ -KubeObject consists of the namespace and the available resources in the same +KubeObject consists of the available resources in a namespace """ type KubeObject { """ @@ -404,16 +404,75 @@ input KubeObjectRequest { GVR Request """ kubeObjRequest: KubeGVRRequest + """ + Namespace in which the Kubernetes object is present + """ + namespace: String! objectType: String! workloads: [Workload] } +""" +Defines details for fetching Kubernetes namespace data +""" +input KubeNamespaceRequest { + """ + ID of the infra + """ + infraID: ID! +} + +""" +Define name in the infra (not really useful at the moment but maybe we will need other field later) +""" +type KubeNamespace{ + """ + Name of the namespace + """ + name: String! +} + + + input KubeGVRRequest { group: String! version: String! resource: String! } +""" +Response received for querying Kubernetes Namespaces +""" +type KubeNamespaceResponse { + """ + ID of the infra in which the Kubernetes namespace is present + """ + infraID: ID! + """ + List of the Kubernetes namespace + """ + kubeNamespace: [KubeNamespace]! +} + +""" +Defines the details of Kubernetes namespace +""" +input KubeNamespaceData { + """ + Unique request ID for fetching Kubernetes namespace details + """ + requestID: ID! + """ + ID of the infra in which the Kubernetes namespace is present + """ + infraID: InfraIdentity! + """ + List of KubeNamespace return by subscriber + """ + kubeNamespace: String! +} + + """ Defines the details of Kubernetes object """ @@ -638,9 +697,15 @@ extend type Mutation { """ # authorized directive not required kubeObj(request: KubeObjectData!): String! + + """ + Receives kubernetes namespace data from subscriber + """ + # authorized directive not required + kubeNamespace(request: KubeNamespaceData!): String! } -extend type Subscription { +type Subscription { # INFRA OPERATIONS """ Listens infra events from the graphql server @@ -663,4 +728,9 @@ extend type Subscription { Returns a kubernetes object given an input """ getKubeObject(request: KubeObjectRequest!): KubeObjectResponse! + + """ + Returns a kubernetes namespaces given an input + """ + getKubeNamespace(request: KubeNamespaceRequest!): KubeNamespaceResponse! } diff --git a/chaoscenter/graphql/definitions/shared/chaoshub.graphqls b/chaoscenter/graphql/definitions/shared/chaoshub.graphqls index 952ee98cf19..12f1cafb2f7 100644 --- a/chaoscenter/graphql/definitions/shared/chaoshub.graphqls +++ b/chaoscenter/graphql/definitions/shared/chaoshub.graphqls @@ -31,6 +31,10 @@ type ChaosHub implements ResourceDetails & Audit { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ ID of the project in which the chaos hub is present """ projectID: ID! @@ -206,6 +210,10 @@ type ChaosHubStatus implements ResourceDetails & Audit { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is available or not. """ isAvailable: Boolean! @@ -320,6 +328,10 @@ input CreateChaosHubRequest { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is private or not. """ isPrivate: Boolean! @@ -382,6 +394,10 @@ input CloningInput { """ repoURL: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is private or not. """ isPrivate: Boolean! @@ -426,6 +442,10 @@ input CreateRemoteChaosHub { URL of the git repository """ repoURL: String! + """ + Connected Hub of remote repository + """ + remoteHub: String! } @@ -455,6 +475,10 @@ input UpdateChaosHubRequest { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is private or not. """ isPrivate: Boolean! diff --git a/chaoscenter/graphql/server/Dockerfile b/chaoscenter/graphql/server/Dockerfile index 7497d22c7e5..0c356be4a62 100644 --- a/chaoscenter/graphql/server/Dockerfile +++ b/chaoscenter/graphql/server/Dockerfile @@ -17,7 +17,7 @@ RUN CGO_ENABLED=0 go build -o /output/server -v # DEPLOY STAGE # Use Red Hat UBI minimal image as base -FROM registry.access.redhat.com/ubi9/ubi-minimal:9.4 +FROM registry.access.redhat.com/ubi9/ubi-minimal:9.5 LABEL maintainer="LitmusChaos" diff --git a/chaoscenter/graphql/server/go.mod b/chaoscenter/graphql/server/go.mod index 47ecd58ce44..09c3276fc59 100644 --- a/chaoscenter/graphql/server/go.mod +++ b/chaoscenter/graphql/server/go.mod @@ -3,12 +3,12 @@ module github.com/litmuschaos/litmus/chaoscenter/graphql/server go 1.22.0 require ( - github.com/99designs/gqlgen v0.17.47 + github.com/99designs/gqlgen v0.17.49 github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 github.com/argoproj/argo-workflows/v3 v3.3.5 github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/gin-gonic/gin v1.10.0 - github.com/go-git/go-git/v5 v5.12.0 + github.com/go-git/go-git/v5 v5.13.0 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 @@ -19,12 +19,12 @@ require ( github.com/mrz1836/go-sanitize v1.3.2 github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.9.3 - github.com/stretchr/testify v1.9.0 - github.com/tidwall/gjson v1.17.1 + github.com/stretchr/testify v1.10.0 + github.com/tidwall/gjson v1.17.3 github.com/tidwall/sjson v1.2.5 - github.com/vektah/gqlparser/v2 v2.5.12 - go.mongodb.org/mongo-driver v1.15.0 - golang.org/x/crypto v0.24.0 + github.com/vektah/gqlparser/v2 v2.5.16 + go.mongodb.org/mongo-driver v1.16.1 + golang.org/x/crypto v0.31.0 google.golang.org/grpc v1.64.1 google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v2 v2.4.0 @@ -37,7 +37,7 @@ require ( require ( dario.cat/mergo v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v1.0.0 // indirect + github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect @@ -46,14 +46,14 @@ require ( github.com/cloudflare/circl v1.3.7 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/cyphar/filepath-securejoin v0.2.5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful v2.16.0+incompatible // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-billy/v5 v5.6.0 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.6 // indirect @@ -65,7 +65,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/golang/snappy v0.0.1 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect @@ -82,12 +82,12 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/montanaflynn/stats v0.7.1 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect - github.com/skeema/knownhosts v1.2.2 // indirect + github.com/skeema/knownhosts v1.3.0 // indirect github.com/sosodev/duration v1.3.1 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/tidwall/match v1.1.1 // indirect @@ -100,15 +100,15 @@ require ( github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.33.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + golang.org/x/tools v0.22.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/chaoscenter/graphql/server/go.sum b/chaoscenter/graphql/server/go.sum index bd159a79a2b..0aa5c10eb85 100644 --- a/chaoscenter/graphql/server/go.sum +++ b/chaoscenter/graphql/server/go.sum @@ -43,8 +43,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/99designs/gqlgen v0.17.47 h1:M9DTK8X3+3ATNBfZlHBwMwNngn4hhZWDxNmTiuQU5tQ= -github.com/99designs/gqlgen v0.17.47/go.mod h1:ejVkldSdtmuudqmtfaiqjwlGXWAhIv0DKXGXFY25F04= +github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= +github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/azure-sdk-for-go v32.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= @@ -99,8 +99,8 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= -github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= -github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= +github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -176,7 +176,6 @@ github.com/brancz/gojsontoyaml v0.0.0-20190425155809-e8bd32d46b3d/go.mod h1:IyUJ github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bugsnag/bugsnag-go v1.5.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= @@ -199,7 +198,6 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cfssl v0.0.0-20180726162950-56268a613adf/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= @@ -252,8 +250,8 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo= +github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/cznic/b v0.0.0-20180115125044-35e9bbe41f07/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= github.com/cznic/fileutil v0.0.0-20180108211300-6a051e75936f/go.mod h1:8S58EK26zhXSxzv7NQFpnliaOQsmDUxvoQO3rt154Vg= github.com/cznic/golex v0.0.0-20170803123110-4ab7c5e190e4/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= @@ -300,8 +298,8 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy v1.2.1 h1:njjgvO6cRG9rIqN2ebkqy6cQz2Njkx7Fsfv/zIZqgug= +github.com/elazarl/goproxy v1.2.1/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.6+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -354,8 +352,8 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= -github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= @@ -364,12 +362,12 @@ github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+s github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8= +github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= -github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= +github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi5E= +github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -544,8 +542,9 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= @@ -873,8 +872,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mrunalp/fileutils v0.0.0-20160930181131-4ee1cc9a8058/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= @@ -923,8 +922,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -1059,8 +1058,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= -github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= +github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= @@ -1111,16 +1110,17 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= -github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= +github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -1148,8 +1148,8 @@ github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vektah/gqlparser/v2 v2.5.12 h1:COMhVVnql6RoaF7+aTBWiTADdpLGyZWU3K/NwW0ph98= -github.com/vektah/gqlparser/v2 v2.5.12/go.mod h1:WQQjFc+I1YIzoPvZBhUQX7waZgg3pMLi0r8KymvAE2w= +github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= +github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= github.com/vishvananda/netlink v0.0.0-20171020171820-b2de5d10e38e/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= @@ -1198,8 +1198,8 @@ go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= -go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= +go.mongodb.org/mongo-driver v1.16.1 h1:rIVLL3q0IHM39dvE+z2ulZLp9ENZKThVfuvN/IiN4l8= +go.mongodb.org/mongo-driver v1.16.1/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -1254,10 +1254,8 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1269,6 +1267,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1297,9 +1297,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1367,11 +1366,8 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1401,9 +1397,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1496,21 +1491,16 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1524,11 +1514,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1621,9 +1608,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/chaoscenter/graphql/server/graph/chaos_experiment.resolvers.go b/chaoscenter/graphql/server/graph/chaos_experiment.resolvers.go index 874dcf910ad..f45367aee19 100644 --- a/chaoscenter/graphql/server/graph/chaos_experiment.resolvers.go +++ b/chaoscenter/graphql/server/graph/chaos_experiment.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" diff --git a/chaoscenter/graphql/server/graph/chaos_experiment_run.resolvers.go b/chaoscenter/graphql/server/graph/chaos_experiment_run.resolvers.go index 62a82b0de5f..35ab1e8994d 100644 --- a/chaoscenter/graphql/server/graph/chaos_experiment_run.resolvers.go +++ b/chaoscenter/graphql/server/graph/chaos_experiment_run.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" diff --git a/chaoscenter/graphql/server/graph/chaos_infrastructure.resolvers.go b/chaoscenter/graphql/server/graph/chaos_infrastructure.resolvers.go index 7e4540509eb..2ba387b412b 100644 --- a/chaoscenter/graphql/server/graph/chaos_infrastructure.resolvers.go +++ b/chaoscenter/graphql/server/graph/chaos_infrastructure.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" @@ -116,6 +116,11 @@ func (r *mutationResolver) KubeObj(ctx context.Context, request model.KubeObject return r.chaosInfrastructureService.KubeObj(request, *data_store.Store) } +// KubeNamespace is the resolver for the kubeNamespace field. +func (r *mutationResolver) KubeNamespace(ctx context.Context, request model.KubeNamespaceData) (string, error) { + return r.chaosInfrastructureService.KubeNamespace(request, *data_store.Store) +} + // GetInfra is the resolver for the getInfra field. func (r *queryResolver) GetInfra(ctx context.Context, projectID string, infraID string) (*model.Infra, error) { logFields := logrus.Fields{ @@ -350,6 +355,24 @@ func (r *subscriptionResolver) GetKubeObject(ctx context.Context, request model. return kubeObjData, nil } +// GetKubeNamespace is the resolver for the getKubeNamespace field. +func (r *subscriptionResolver) GetKubeNamespace(ctx context.Context, request model.KubeNamespaceRequest) (<-chan *model.KubeNamespaceResponse, error) { + logrus.Print("NEW NAMESPACE REQUEST", request.InfraID) + kubeNamespaceData := make(chan *model.KubeNamespaceResponse) + reqID := uuid.New() + data_store.Store.Mutex.Lock() + data_store.Store.KubeNamespaceData[reqID.String()] = kubeNamespaceData + data_store.Store.Mutex.Unlock() + go func() { + <-ctx.Done() + logrus.Println("Closed KubeNamespace Listener") + delete(data_store.Store.KubeNamespaceData, reqID.String()) + }() + go r.chaosExperimentHandler.GetKubeNamespaceData(reqID.String(), request, *data_store.Store) + + return kubeNamespaceData, nil +} + // Subscription returns generated.SubscriptionResolver implementation. func (r *Resolver) Subscription() generated.SubscriptionResolver { return &subscriptionResolver{r} } diff --git a/chaoscenter/graphql/server/graph/chaoshub.resolvers.go b/chaoscenter/graphql/server/graph/chaoshub.resolvers.go index e6e86caa8d3..9eb0396ed37 100644 --- a/chaoscenter/graphql/server/graph/chaoshub.resolvers.go +++ b/chaoscenter/graphql/server/graph/chaoshub.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" @@ -14,7 +14,6 @@ import ( // AddChaosHub is the resolver for the addChaosHub field. func (r *mutationResolver) AddChaosHub(ctx context.Context, projectID string, request model.CreateChaosHubRequest) (*model.ChaosHub, error) { - if err := authorization.ValidateRole(ctx, projectID, authorization.MutationRbacRules[authorization.AddChaosHub], model.InvitationAccepted.String()); err != nil { diff --git a/chaoscenter/graphql/server/graph/environment.resolvers.go b/chaoscenter/graphql/server/graph/environment.resolvers.go index b9fd9a8496a..7cbfdd03e9f 100644 --- a/chaoscenter/graphql/server/graph/environment.resolvers.go +++ b/chaoscenter/graphql/server/graph/environment.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" diff --git a/chaoscenter/graphql/server/graph/generated/generated.go b/chaoscenter/graphql/server/graph/generated/generated.go index 932e018a654..9f53f4eaaca 100644 --- a/chaoscenter/graphql/server/graph/generated/generated.go +++ b/chaoscenter/graphql/server/graph/generated/generated.go @@ -91,6 +91,7 @@ type ComplexityRoot struct { Name func(childComplexity int) int Password func(childComplexity int) int ProjectID func(childComplexity int) int + RemoteHub func(childComplexity int) int RepoBranch func(childComplexity int) int RepoURL func(childComplexity int) int SSHPrivateKey func(childComplexity int) int @@ -115,6 +116,7 @@ type ComplexityRoot struct { LastSyncedAt func(childComplexity int) int Name func(childComplexity int) int Password func(childComplexity int) int + RemoteHub func(childComplexity int) int RepoBranch func(childComplexity int) int RepoURL func(childComplexity int) int SSHPrivateKey func(childComplexity int) int @@ -398,6 +400,15 @@ type ComplexityRoot struct { Version func(childComplexity int) int } + KubeNamespace struct { + Name func(childComplexity int) int + } + + KubeNamespaceResponse struct { + InfraID func(childComplexity int) int + KubeNamespace func(childComplexity int) int + } + KubeObject struct { Data func(childComplexity int) int Namespace func(childComplexity int) int @@ -497,6 +508,7 @@ type ComplexityRoot struct { GenerateSSHKey func(childComplexity int) int GetManifestWithInfraID func(childComplexity int, projectID string, infraID string, accessKey string) int GitopsNotifier func(childComplexity int, clusterInfo model.InfraIdentity, experimentID string) int + KubeNamespace func(childComplexity int, request model.KubeNamespaceData) int KubeObj func(childComplexity int, request model.KubeObjectData) int PodLog func(childComplexity int, request model.PodLog) int RegisterInfra func(childComplexity int, projectID string, request model.RegisterInfraRequest) int @@ -694,10 +706,11 @@ type ComplexityRoot struct { } Subscription struct { - GetInfraEvents func(childComplexity int, projectID string) int - GetKubeObject func(childComplexity int, request model.KubeObjectRequest) int - GetPodLog func(childComplexity int, request model.PodLogRequest) int - InfraConnect func(childComplexity int, request model.InfraIdentity) int + GetInfraEvents func(childComplexity int, projectID string) int + GetKubeNamespace func(childComplexity int, request model.KubeNamespaceRequest) int + GetKubeObject func(childComplexity int, request model.KubeObjectRequest) int + GetPodLog func(childComplexity int, request model.PodLogRequest) int + InfraConnect func(childComplexity int, request model.InfraIdentity) int } UserDetails struct { @@ -727,6 +740,7 @@ type MutationResolver interface { GetManifestWithInfraID(ctx context.Context, projectID string, infraID string, accessKey string) (string, error) PodLog(ctx context.Context, request model.PodLog) (string, error) KubeObj(ctx context.Context, request model.KubeObjectData) (string, error) + KubeNamespace(ctx context.Context, request model.KubeNamespaceData) (string, error) AddChaosHub(ctx context.Context, projectID string, request model.CreateChaosHubRequest) (*model.ChaosHub, error) AddRemoteChaosHub(ctx context.Context, projectID string, request model.CreateRemoteChaosHub) (*model.ChaosHub, error) SaveChaosHub(ctx context.Context, projectID string, request model.CreateChaosHubRequest) (*model.ChaosHub, error) @@ -786,6 +800,7 @@ type SubscriptionResolver interface { InfraConnect(ctx context.Context, request model.InfraIdentity) (<-chan *model.InfraActionResponse, error) GetPodLog(ctx context.Context, request model.PodLogRequest) (<-chan *model.PodLogResponse, error) GetKubeObject(ctx context.Context, request model.KubeObjectRequest) (<-chan *model.KubeObjectResponse, error) + GetKubeNamespace(ctx context.Context, request model.KubeNamespaceRequest) (<-chan *model.KubeNamespaceResponse, error) } type executableSchema struct { @@ -1031,6 +1046,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ChaosHub.ProjectID(childComplexity), true + case "ChaosHub.remoteHub": + if e.complexity.ChaosHub.RemoteHub == nil { + break + } + + return e.complexity.ChaosHub.RemoteHub(childComplexity), true + case "ChaosHub.repoBranch": if e.complexity.ChaosHub.RepoBranch == nil { break @@ -1178,6 +1200,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ChaosHubStatus.Password(childComplexity), true + case "ChaosHubStatus.remoteHub": + if e.complexity.ChaosHubStatus.RemoteHub == nil { + break + } + + return e.complexity.ChaosHubStatus.RemoteHub(childComplexity), true + case "ChaosHubStatus.repoBranch": if e.complexity.ChaosHubStatus.RepoBranch == nil { break @@ -2557,6 +2586,27 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.K8SProbe.Version(childComplexity), true + case "KubeNamespace.name": + if e.complexity.KubeNamespace.Name == nil { + break + } + + return e.complexity.KubeNamespace.Name(childComplexity), true + + case "KubeNamespaceResponse.infraID": + if e.complexity.KubeNamespaceResponse.InfraID == nil { + break + } + + return e.complexity.KubeNamespaceResponse.InfraID(childComplexity), true + + case "KubeNamespaceResponse.kubeNamespace": + if e.complexity.KubeNamespaceResponse.KubeNamespace == nil { + break + } + + return e.complexity.KubeNamespaceResponse.KubeNamespace(childComplexity), true + case "KubeObject.data": if e.complexity.KubeObject.Data == nil { break @@ -3081,6 +3131,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Mutation.GitopsNotifier(childComplexity, args["clusterInfo"].(model.InfraIdentity), args["experimentID"].(string)), true + case "Mutation.kubeNamespace": + if e.complexity.Mutation.KubeNamespace == nil { + break + } + + args, err := ec.field_Mutation_kubeNamespace_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.KubeNamespace(childComplexity, args["request"].(model.KubeNamespaceData)), true + case "Mutation.kubeObj": if e.complexity.Mutation.KubeObj == nil { break @@ -4256,6 +4318,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Subscription.GetInfraEvents(childComplexity, args["projectID"].(string)), true + case "Subscription.getKubeNamespace": + if e.complexity.Subscription.GetKubeNamespace == nil { + break + } + + args, err := ec.field_Subscription_getKubeNamespace_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Subscription.GetKubeNamespace(childComplexity, args["request"].(model.KubeNamespaceRequest)), true + case "Subscription.getKubeObject": if e.complexity.Subscription.GetKubeObject == nil { break @@ -4361,6 +4435,8 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler { ec.unmarshalInputInfraIdentity, ec.unmarshalInputK8SProbeRequest, ec.unmarshalInputKubeGVRRequest, + ec.unmarshalInputKubeNamespaceData, + ec.unmarshalInputKubeNamespaceRequest, ec.unmarshalInputKubeObjectData, ec.unmarshalInputKubeObjectRequest, ec.unmarshalInputKubernetesCMDProbeRequest, @@ -5217,7 +5293,7 @@ type GetExperimentStatsResponse { totalExpCategorizedByResiliencyScore: [ResilienceScoreCategory]! } -extend type Query { +type Query { """ @@ -5239,7 +5315,7 @@ extend type Query { getExperimentStats(projectID: ID!): GetExperimentStatsResponse! } -extend type Mutation { +type Mutation { """ Creates a new experiment and applies its manifest """ @@ -5682,11 +5758,11 @@ type KubeObjectResponse { """ Type of the Kubernetes object """ - kubeObj: [KubeObject]! + kubeObj: KubeObject! } """ -KubeObject consists of the namespace and the available resources in the same +KubeObject consists of the available resources in a namespace """ type KubeObject { """ @@ -5728,16 +5804,75 @@ input KubeObjectRequest { GVR Request """ kubeObjRequest: KubeGVRRequest + """ + Namespace in which the Kubernetes object is present + """ + namespace: String! objectType: String! workloads: [Workload] } +""" +Defines details for fetching Kubernetes namespace data +""" +input KubeNamespaceRequest { + """ + ID of the infra + """ + infraID: ID! +} + +""" +Define name in the infra (not really useful at the moment but maybe we will need other field later) +""" +type KubeNamespace{ + """ + Name of the namespace + """ + name: String! +} + + + input KubeGVRRequest { group: String! version: String! resource: String! } +""" +Response received for querying Kubernetes Namespaces +""" +type KubeNamespaceResponse { + """ + ID of the infra in which the Kubernetes namespace is present + """ + infraID: ID! + """ + List of the Kubernetes namespace + """ + kubeNamespace: [KubeNamespace]! +} + +""" +Defines the details of Kubernetes namespace +""" +input KubeNamespaceData { + """ + Unique request ID for fetching Kubernetes namespace details + """ + requestID: ID! + """ + ID of the infra in which the Kubernetes namespace is present + """ + infraID: InfraIdentity! + """ + List of KubeNamespace return by subscriber + """ + kubeNamespace: String! +} + + """ Defines the details of Kubernetes object """ @@ -5962,9 +6097,15 @@ extend type Mutation { """ # authorized directive not required kubeObj(request: KubeObjectData!): String! + + """ + Receives kubernetes namespace data from subscriber + """ + # authorized directive not required + kubeNamespace(request: KubeNamespaceData!): String! } -extend type Subscription { +type Subscription { # INFRA OPERATIONS """ Listens infra events from the graphql server @@ -5987,6 +6128,11 @@ extend type Subscription { Returns a kubernetes object given an input """ getKubeObject(request: KubeObjectRequest!): KubeObjectResponse! + + """ + Returns a kubernetes namespaces given an input + """ + getKubeNamespace(request: KubeNamespaceRequest!): KubeNamespaceResponse! } `, BuiltIn: false}, {Name: "../../../definitions/shared/chaoshub.graphqls", Input: `enum AuthType { @@ -6022,6 +6168,10 @@ type ChaosHub implements ResourceDetails & Audit { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ ID of the project in which the chaos hub is present """ projectID: ID! @@ -6197,6 +6347,10 @@ type ChaosHubStatus implements ResourceDetails & Audit { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is available or not. """ isAvailable: Boolean! @@ -6311,6 +6465,10 @@ input CreateChaosHubRequest { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is private or not. """ isPrivate: Boolean! @@ -6373,6 +6531,10 @@ input CloningInput { """ repoURL: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is private or not. """ isPrivate: Boolean! @@ -6417,6 +6579,10 @@ input CreateRemoteChaosHub { URL of the git repository """ repoURL: String! + """ + Connected Hub of remote repository + """ + remoteHub: String! } @@ -6446,6 +6612,10 @@ input UpdateChaosHubRequest { """ repoBranch: String! """ + Connected Hub of remote repository + """ + remoteHub: String! + """ Bool value indicating whether the hub is private or not. """ isPrivate: Boolean! @@ -8607,6 +8777,21 @@ func (ec *executionContext) field_Mutation_gitopsNotifier_args(ctx context.Conte return args, nil } +func (ec *executionContext) field_Mutation_kubeNamespace_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 model.KubeNamespaceData + if tmp, ok := rawArgs["request"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("request")) + arg0, err = ec.unmarshalNKubeNamespaceData2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceData(ctx, tmp) + if err != nil { + return nil, err + } + } + args["request"] = arg0 + return args, nil +} + func (ec *executionContext) field_Mutation_kubeObj_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} @@ -9717,6 +9902,21 @@ func (ec *executionContext) field_Subscription_getInfraEvents_args(ctx context.C return args, nil } +func (ec *executionContext) field_Subscription_getKubeNamespace_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 model.KubeNamespaceRequest + if tmp, ok := rawArgs["request"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("request")) + arg0, err = ec.unmarshalNKubeNamespaceRequest2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceRequest(ctx, tmp) + if err != nil { + return nil, err + } + } + args["request"] = arg0 + return args, nil +} + func (ec *executionContext) field_Subscription_getKubeObject_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { var err error args := map[string]interface{}{} @@ -9831,7 +10031,7 @@ func (ec *executionContext) _ActionPayload_requestID(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ActionPayload_requestID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ActionPayload_requestID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ActionPayload", Field: field, @@ -9875,7 +10075,7 @@ func (ec *executionContext) _ActionPayload_requestType(ctx context.Context, fiel return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ActionPayload_requestType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ActionPayload_requestType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ActionPayload", Field: field, @@ -9919,7 +10119,7 @@ func (ec *executionContext) _ActionPayload_k8sManifest(ctx context.Context, fiel return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ActionPayload_k8sManifest(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ActionPayload_k8sManifest(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ActionPayload", Field: field, @@ -9963,7 +10163,7 @@ func (ec *executionContext) _ActionPayload_namespace(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ActionPayload_namespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ActionPayload_namespace(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ActionPayload", Field: field, @@ -10004,7 +10204,7 @@ func (ec *executionContext) _ActionPayload_externalData(ctx context.Context, fie return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ActionPayload_externalData(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ActionPayload_externalData(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ActionPayload", Field: field, @@ -10045,7 +10245,7 @@ func (ec *executionContext) _ActionPayload_username(ctx context.Context, field g return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ActionPayload_username(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ActionPayload_username(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ActionPayload", Field: field, @@ -10089,7 +10289,7 @@ func (ec *executionContext) _Annotation_categories(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Annotation_categories(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Annotation_categories(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Annotation", Field: field, @@ -10133,7 +10333,7 @@ func (ec *executionContext) _Annotation_vendor(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Annotation_vendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Annotation_vendor(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Annotation", Field: field, @@ -10177,7 +10377,7 @@ func (ec *executionContext) _Annotation_createdAt(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Annotation_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Annotation_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Annotation", Field: field, @@ -10221,7 +10421,7 @@ func (ec *executionContext) _Annotation_repository(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Annotation_repository(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Annotation_repository(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Annotation", Field: field, @@ -10265,7 +10465,7 @@ func (ec *executionContext) _Annotation_support(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Annotation_support(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Annotation_support(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Annotation", Field: field, @@ -10309,7 +10509,7 @@ func (ec *executionContext) _Annotation_chartDescription(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Annotation_chartDescription(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Annotation_chartDescription(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Annotation", Field: field, @@ -10353,7 +10553,7 @@ func (ec *executionContext) _ChaosExperimentResponse_experimentID(ctx context.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_experimentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_experimentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10397,7 +10597,7 @@ func (ec *executionContext) _ChaosExperimentResponse_projectID(ctx context.Conte return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10441,7 +10641,7 @@ func (ec *executionContext) _ChaosExperimentResponse_cronSyntax(ctx context.Cont return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_cronSyntax(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_cronSyntax(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10485,7 +10685,7 @@ func (ec *executionContext) _ChaosExperimentResponse_experimentName(ctx context. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_experimentName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_experimentName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10529,7 +10729,7 @@ func (ec *executionContext) _ChaosExperimentResponse_experimentDescription(ctx c return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_experimentDescription(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_experimentDescription(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10573,7 +10773,7 @@ func (ec *executionContext) _ChaosExperimentResponse_isCustomExperiment(ctx cont return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_isCustomExperiment(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_isCustomExperiment(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10614,7 +10814,7 @@ func (ec *executionContext) _ChaosExperimentResponse_tags(ctx context.Context, f return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosExperimentResponse_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosExperimentResponse_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosExperimentResponse", Field: field, @@ -10658,7 +10858,7 @@ func (ec *executionContext) _ChaosHub_id(ctx context.Context, field graphql.Coll return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_id(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10702,7 +10902,7 @@ func (ec *executionContext) _ChaosHub_repoURL(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_repoURL(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_repoURL(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10746,7 +10946,51 @@ func (ec *executionContext) _ChaosHub_repoBranch(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_repoBranch(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_repoBranch(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ChaosHub", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _ChaosHub_remoteHub(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHub) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ChaosHub_remoteHub(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.RemoteHub, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ChaosHub_remoteHub(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10790,7 +11034,7 @@ func (ec *executionContext) _ChaosHub_projectID(ctx context.Context, field graph return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10834,7 +11078,7 @@ func (ec *executionContext) _ChaosHub_isDefault(ctx context.Context, field graph return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_isDefault(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_isDefault(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10878,7 +11122,7 @@ func (ec *executionContext) _ChaosHub_name(ctx context.Context, field graphql.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10919,7 +11163,7 @@ func (ec *executionContext) _ChaosHub_tags(ctx context.Context, field graphql.Co return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -10960,7 +11204,7 @@ func (ec *executionContext) _ChaosHub_createdBy(ctx context.Context, field graph return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11009,7 +11253,7 @@ func (ec *executionContext) _ChaosHub_updatedBy(ctx context.Context, field graph return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11058,7 +11302,7 @@ func (ec *executionContext) _ChaosHub_description(ctx context.Context, field gra return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11102,7 +11346,7 @@ func (ec *executionContext) _ChaosHub_hubType(ctx context.Context, field graphql return ec.marshalNHubType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐHubType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_hubType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_hubType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11146,7 +11390,7 @@ func (ec *executionContext) _ChaosHub_isPrivate(ctx context.Context, field graph return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_isPrivate(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_isPrivate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11190,7 +11434,7 @@ func (ec *executionContext) _ChaosHub_authType(ctx context.Context, field graphq return ec.marshalNAuthType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐAuthType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_authType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_authType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11231,7 +11475,7 @@ func (ec *executionContext) _ChaosHub_token(ctx context.Context, field graphql.C return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_token(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_token(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11272,7 +11516,7 @@ func (ec *executionContext) _ChaosHub_userName(ctx context.Context, field graphq return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_userName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_userName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11313,7 +11557,7 @@ func (ec *executionContext) _ChaosHub_password(ctx context.Context, field graphq return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_password(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_password(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11354,7 +11598,7 @@ func (ec *executionContext) _ChaosHub_sshPrivateKey(ctx context.Context, field g return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_sshPrivateKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_sshPrivateKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11398,7 +11642,7 @@ func (ec *executionContext) _ChaosHub_isRemoved(ctx context.Context, field graph return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11442,7 +11686,7 @@ func (ec *executionContext) _ChaosHub_createdAt(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11486,7 +11730,7 @@ func (ec *executionContext) _ChaosHub_updatedAt(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11530,7 +11774,7 @@ func (ec *executionContext) _ChaosHub_lastSyncedAt(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHub_lastSyncedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHub_lastSyncedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHub", Field: field, @@ -11574,7 +11818,7 @@ func (ec *executionContext) _ChaosHubStatus_id(ctx context.Context, field graphq return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_id(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11618,7 +11862,7 @@ func (ec *executionContext) _ChaosHubStatus_repoURL(ctx context.Context, field g return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_repoURL(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_repoURL(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11662,95 +11906,7 @@ func (ec *executionContext) _ChaosHubStatus_repoBranch(ctx context.Context, fiel return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_repoBranch(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ChaosHubStatus", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil -} - -func (ec *executionContext) _ChaosHubStatus_isAvailable(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_ChaosHubStatus_isAvailable(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.IsAvailable, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_ChaosHubStatus_isAvailable(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ChaosHubStatus", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil -} - -func (ec *executionContext) _ChaosHubStatus_totalFaults(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_ChaosHubStatus_totalFaults(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.TotalFaults, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_ChaosHubStatus_totalFaults(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_repoBranch(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11763,8 +11919,8 @@ func (ec *executionContext) fieldContext_ChaosHubStatus_totalFaults(ctx context. return fc, nil } -func (ec *executionContext) _ChaosHubStatus_totalExperiments(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_ChaosHubStatus_totalExperiments(ctx, field) +func (ec *executionContext) _ChaosHubStatus_remoteHub(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ChaosHubStatus_remoteHub(ctx, field) if err != nil { return graphql.Null } @@ -11777,7 +11933,7 @@ func (ec *executionContext) _ChaosHubStatus_totalExperiments(ctx context.Context }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return obj.TotalExperiments, nil + return obj.RemoteHub, nil }) if err != nil { ec.Error(ctx, err) @@ -11794,7 +11950,139 @@ func (ec *executionContext) _ChaosHubStatus_totalExperiments(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_totalExperiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_remoteHub(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ChaosHubStatus", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _ChaosHubStatus_isAvailable(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ChaosHubStatus_isAvailable(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.IsAvailable, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ChaosHubStatus_isAvailable(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ChaosHubStatus", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _ChaosHubStatus_totalFaults(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ChaosHubStatus_totalFaults(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.TotalFaults, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ChaosHubStatus_totalFaults(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ChaosHubStatus", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _ChaosHubStatus_totalExperiments(ctx context.Context, field graphql.CollectedField, obj *model.ChaosHubStatus) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ChaosHubStatus_totalExperiments(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.TotalExperiments, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ChaosHubStatus_totalExperiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11838,7 +12126,7 @@ func (ec *executionContext) _ChaosHubStatus_name(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11882,7 +12170,7 @@ func (ec *executionContext) _ChaosHubStatus_hubType(ctx context.Context, field g return ec.marshalNHubType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐHubType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_hubType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_hubType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11926,7 +12214,7 @@ func (ec *executionContext) _ChaosHubStatus_isPrivate(ctx context.Context, field return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_isPrivate(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_isPrivate(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -11970,7 +12258,7 @@ func (ec *executionContext) _ChaosHubStatus_authType(ctx context.Context, field return ec.marshalNAuthType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐAuthType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_authType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_authType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12011,7 +12299,7 @@ func (ec *executionContext) _ChaosHubStatus_token(ctx context.Context, field gra return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_token(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_token(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12052,7 +12340,7 @@ func (ec *executionContext) _ChaosHubStatus_userName(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_userName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_userName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12093,7 +12381,7 @@ func (ec *executionContext) _ChaosHubStatus_password(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_password(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_password(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12137,7 +12425,7 @@ func (ec *executionContext) _ChaosHubStatus_isRemoved(ctx context.Context, field return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12178,7 +12466,7 @@ func (ec *executionContext) _ChaosHubStatus_sshPrivateKey(ctx context.Context, f return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_sshPrivateKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_sshPrivateKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12219,7 +12507,7 @@ func (ec *executionContext) _ChaosHubStatus_sshPublicKey(ctx context.Context, fi return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_sshPublicKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_sshPublicKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12263,7 +12551,7 @@ func (ec *executionContext) _ChaosHubStatus_lastSyncedAt(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_lastSyncedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_lastSyncedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12304,7 +12592,7 @@ func (ec *executionContext) _ChaosHubStatus_tags(ctx context.Context, field grap return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12345,7 +12633,7 @@ func (ec *executionContext) _ChaosHubStatus_createdBy(ctx context.Context, field return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12394,7 +12682,7 @@ func (ec *executionContext) _ChaosHubStatus_updatedBy(ctx context.Context, field return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12446,7 +12734,7 @@ func (ec *executionContext) _ChaosHubStatus_createdAt(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12490,7 +12778,7 @@ func (ec *executionContext) _ChaosHubStatus_updatedAt(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12531,7 +12819,7 @@ func (ec *executionContext) _ChaosHubStatus_description(ctx context.Context, fie return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12575,7 +12863,7 @@ func (ec *executionContext) _ChaosHubStatus_isDefault(ctx context.Context, field return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ChaosHubStatus_isDefault(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ChaosHubStatus_isDefault(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ChaosHubStatus", Field: field, @@ -12619,7 +12907,7 @@ func (ec *executionContext) _Chart_apiVersion(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Chart_apiVersion(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Chart_apiVersion(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Chart", Field: field, @@ -12663,7 +12951,7 @@ func (ec *executionContext) _Chart_kind(ctx context.Context, field graphql.Colle return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Chart_kind(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Chart_kind(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Chart", Field: field, @@ -12707,7 +12995,7 @@ func (ec *executionContext) _Chart_metadata(ctx context.Context, field graphql.C return ec.marshalNMetadata2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐMetadata(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Chart_metadata(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Chart_metadata(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Chart", Field: field, @@ -12759,7 +13047,7 @@ func (ec *executionContext) _Chart_spec(ctx context.Context, field graphql.Colle return ec.marshalNSpec2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐSpec(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Chart_spec(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Chart_spec(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Chart", Field: field, @@ -12831,7 +13119,7 @@ func (ec *executionContext) _Chart_packageInfo(ctx context.Context, field graphq return ec.marshalNPackageInformation2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐPackageInformation(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Chart_packageInfo(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Chart_packageInfo(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Chart", Field: field, @@ -12881,7 +13169,7 @@ func (ec *executionContext) _Comparator_type(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Comparator_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Comparator_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Comparator", Field: field, @@ -12925,7 +13213,7 @@ func (ec *executionContext) _Comparator_value(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Comparator_value(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Comparator_value(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Comparator", Field: field, @@ -12969,7 +13257,7 @@ func (ec *executionContext) _Comparator_criteria(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Comparator_criteria(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Comparator_criteria(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Comparator", Field: field, @@ -13013,7 +13301,7 @@ func (ec *executionContext) _ConfirmInfraRegistrationResponse_isInfraConfirmed(c return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ConfirmInfraRegistrationResponse_isInfraConfirmed(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ConfirmInfraRegistrationResponse_isInfraConfirmed(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ConfirmInfraRegistrationResponse", Field: field, @@ -13054,7 +13342,7 @@ func (ec *executionContext) _ConfirmInfraRegistrationResponse_newAccessKey(ctx c return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ConfirmInfraRegistrationResponse_newAccessKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ConfirmInfraRegistrationResponse_newAccessKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ConfirmInfraRegistrationResponse", Field: field, @@ -13095,7 +13383,7 @@ func (ec *executionContext) _ConfirmInfraRegistrationResponse_infraID(ctx contex return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ConfirmInfraRegistrationResponse_infraID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ConfirmInfraRegistrationResponse_infraID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ConfirmInfraRegistrationResponse", Field: field, @@ -13139,7 +13427,7 @@ func (ec *executionContext) _Environment_projectID(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13183,7 +13471,7 @@ func (ec *executionContext) _Environment_environmentID(ctx context.Context, fiel return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_environmentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_environmentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13227,7 +13515,7 @@ func (ec *executionContext) _Environment_name(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13268,7 +13556,7 @@ func (ec *executionContext) _Environment_description(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13309,7 +13597,7 @@ func (ec *executionContext) _Environment_tags(ctx context.Context, field graphql return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13353,7 +13641,7 @@ func (ec *executionContext) _Environment_type(ctx context.Context, field graphql return ec.marshalNEnvironmentType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐEnvironmentType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13397,7 +13685,7 @@ func (ec *executionContext) _Environment_createdAt(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13438,7 +13726,7 @@ func (ec *executionContext) _Environment_createdBy(ctx context.Context, field gr return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13487,7 +13775,7 @@ func (ec *executionContext) _Environment_updatedBy(ctx context.Context, field gr return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13539,7 +13827,7 @@ func (ec *executionContext) _Environment_updatedAt(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13580,7 +13868,7 @@ func (ec *executionContext) _Environment_isRemoved(ctx context.Context, field gr return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13621,7 +13909,7 @@ func (ec *executionContext) _Environment_infraIDs(ctx context.Context, field gra return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Environment_infraIDs(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Environment_infraIDs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Environment", Field: field, @@ -13665,7 +13953,7 @@ func (ec *executionContext) _ExecutedByExperiment_experimentID(ctx context.Conte return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutedByExperiment_experimentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutedByExperiment_experimentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutedByExperiment", Field: field, @@ -13709,7 +13997,7 @@ func (ec *executionContext) _ExecutedByExperiment_experimentName(ctx context.Con return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutedByExperiment_experimentName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutedByExperiment_experimentName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutedByExperiment", Field: field, @@ -13753,7 +14041,7 @@ func (ec *executionContext) _ExecutedByExperiment_updatedAt(ctx context.Context, return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutedByExperiment_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutedByExperiment_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutedByExperiment", Field: field, @@ -13794,7 +14082,7 @@ func (ec *executionContext) _ExecutedByExperiment_updatedBy(ctx context.Context, return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutedByExperiment_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutedByExperiment_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutedByExperiment", Field: field, @@ -13846,7 +14134,7 @@ func (ec *executionContext) _ExecutionHistory_mode(ctx context.Context, field gr return ec.marshalNMode2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐMode(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutionHistory_mode(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutionHistory_mode(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutionHistory", Field: field, @@ -13890,7 +14178,7 @@ func (ec *executionContext) _ExecutionHistory_faultName(ctx context.Context, fie return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutionHistory_faultName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutionHistory_faultName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutionHistory", Field: field, @@ -13934,7 +14222,7 @@ func (ec *executionContext) _ExecutionHistory_status(ctx context.Context, field return ec.marshalNStatus2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐStatus(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutionHistory_status(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutionHistory_status(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutionHistory", Field: field, @@ -13984,7 +14272,7 @@ func (ec *executionContext) _ExecutionHistory_executedByExperiment(ctx context.C return ec.marshalNExecutedByExperiment2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExecutedByExperiment(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExecutionHistory_executedByExperiment(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExecutionHistory_executedByExperiment(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExecutionHistory", Field: field, @@ -14038,7 +14326,7 @@ func (ec *executionContext) _Experiment_projectID(ctx context.Context, field gra return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14082,7 +14370,7 @@ func (ec *executionContext) _Experiment_experimentID(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_experimentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_experimentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14123,7 +14411,7 @@ func (ec *executionContext) _Experiment_experimentType(ctx context.Context, fiel return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_experimentType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_experimentType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14167,7 +14455,7 @@ func (ec *executionContext) _Experiment_experimentManifest(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_experimentManifest(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_experimentManifest(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14211,7 +14499,7 @@ func (ec *executionContext) _Experiment_cronSyntax(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_cronSyntax(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_cronSyntax(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14255,7 +14543,7 @@ func (ec *executionContext) _Experiment_name(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14299,7 +14587,7 @@ func (ec *executionContext) _Experiment_description(ctx context.Context, field g return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14343,7 +14631,7 @@ func (ec *executionContext) _Experiment_weightages(ctx context.Context, field gr return ec.marshalNWeightages2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐWeightagesᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_weightages(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_weightages(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14393,7 +14681,7 @@ func (ec *executionContext) _Experiment_isCustomExperiment(ctx context.Context, return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_isCustomExperiment(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_isCustomExperiment(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14437,7 +14725,7 @@ func (ec *executionContext) _Experiment_updatedAt(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14481,7 +14769,7 @@ func (ec *executionContext) _Experiment_createdAt(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14522,7 +14810,7 @@ func (ec *executionContext) _Experiment_infra(ctx context.Context, field graphql return ec.marshalOInfra2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfra(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_infra(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_infra(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14622,7 +14910,7 @@ func (ec *executionContext) _Experiment_isRemoved(ctx context.Context, field gra return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14663,7 +14951,7 @@ func (ec *executionContext) _Experiment_tags(ctx context.Context, field graphql. return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14704,7 +14992,7 @@ func (ec *executionContext) _Experiment_createdBy(ctx context.Context, field gra return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14753,7 +15041,7 @@ func (ec *executionContext) _Experiment_recentExperimentRunDetails(ctx context.C return ec.marshalORecentExperimentRun2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐRecentExperimentRun(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_recentExperimentRunDetails(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_recentExperimentRunDetails(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14812,7 +15100,7 @@ func (ec *executionContext) _Experiment_updatedBy(ctx context.Context, field gra return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiment_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiment_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiment", Field: field, @@ -14864,7 +15152,7 @@ func (ec *executionContext) _ExperimentDetails_engineDetails(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentDetails_engineDetails(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentDetails_engineDetails(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentDetails", Field: field, @@ -14908,7 +15196,7 @@ func (ec *executionContext) _ExperimentDetails_experimentDetails(ctx context.Con return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentDetails_experimentDetails(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentDetails_experimentDetails(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentDetails", Field: field, @@ -14952,7 +15240,7 @@ func (ec *executionContext) _ExperimentRun_projectID(ctx context.Context, field return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -14996,7 +15284,7 @@ func (ec *executionContext) _ExperimentRun_experimentRunID(ctx context.Context, return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_experimentRunID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_experimentRunID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15037,7 +15325,7 @@ func (ec *executionContext) _ExperimentRun_experimentType(ctx context.Context, f return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_experimentType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_experimentType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15081,7 +15369,7 @@ func (ec *executionContext) _ExperimentRun_experimentID(ctx context.Context, fie return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_experimentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_experimentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15125,7 +15413,7 @@ func (ec *executionContext) _ExperimentRun_weightages(ctx context.Context, field return ec.marshalNWeightages2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐWeightagesᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_weightages(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_weightages(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15175,7 +15463,7 @@ func (ec *executionContext) _ExperimentRun_updatedAt(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15219,7 +15507,7 @@ func (ec *executionContext) _ExperimentRun_createdAt(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15263,7 +15551,7 @@ func (ec *executionContext) _ExperimentRun_infra(ctx context.Context, field grap return ec.marshalNInfra2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfra(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_infra(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_infra(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15363,7 +15651,7 @@ func (ec *executionContext) _ExperimentRun_experimentName(ctx context.Context, f return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_experimentName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_experimentName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15407,7 +15695,7 @@ func (ec *executionContext) _ExperimentRun_experimentManifest(ctx context.Contex return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_experimentManifest(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_experimentManifest(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15451,7 +15739,7 @@ func (ec *executionContext) _ExperimentRun_phase(ctx context.Context, field grap return ec.marshalNExperimentRunStatus2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExperimentRunStatus(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_phase(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_phase(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15492,7 +15780,7 @@ func (ec *executionContext) _ExperimentRun_resiliencyScore(ctx context.Context, return ec.marshalOFloat2ᚖfloat64(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_resiliencyScore(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_resiliencyScore(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15533,7 +15821,7 @@ func (ec *executionContext) _ExperimentRun_faultsPassed(ctx context.Context, fie return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_faultsPassed(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_faultsPassed(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15574,7 +15862,7 @@ func (ec *executionContext) _ExperimentRun_faultsFailed(ctx context.Context, fie return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_faultsFailed(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_faultsFailed(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15615,7 +15903,7 @@ func (ec *executionContext) _ExperimentRun_faultsAwaited(ctx context.Context, fi return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_faultsAwaited(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_faultsAwaited(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15656,7 +15944,7 @@ func (ec *executionContext) _ExperimentRun_faultsStopped(ctx context.Context, fi return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_faultsStopped(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_faultsStopped(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15697,7 +15985,7 @@ func (ec *executionContext) _ExperimentRun_faultsNa(ctx context.Context, field g return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_faultsNa(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_faultsNa(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15738,7 +16026,7 @@ func (ec *executionContext) _ExperimentRun_totalFaults(ctx context.Context, fiel return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_totalFaults(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_totalFaults(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15782,7 +16070,7 @@ func (ec *executionContext) _ExperimentRun_executionData(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_executionData(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_executionData(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15823,7 +16111,7 @@ func (ec *executionContext) _ExperimentRun_isRemoved(ctx context.Context, field return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15864,7 +16152,7 @@ func (ec *executionContext) _ExperimentRun_updatedBy(ctx context.Context, field return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15913,7 +16201,7 @@ func (ec *executionContext) _ExperimentRun_createdBy(ctx context.Context, field return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -15962,7 +16250,7 @@ func (ec *executionContext) _ExperimentRun_notifyID(ctx context.Context, field g return ec.marshalOID2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_notifyID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_notifyID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -16006,7 +16294,7 @@ func (ec *executionContext) _ExperimentRun_runSequence(ctx context.Context, fiel return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ExperimentRun_runSequence(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ExperimentRun_runSequence(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ExperimentRun", Field: field, @@ -16050,7 +16338,7 @@ func (ec *executionContext) _Experiments_name(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiments_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiments_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiments", Field: field, @@ -16094,7 +16382,7 @@ func (ec *executionContext) _Experiments_CSV(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiments_CSV(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiments_CSV(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiments", Field: field, @@ -16138,7 +16426,7 @@ func (ec *executionContext) _Experiments_desc(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Experiments_desc(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Experiments_desc(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Experiments", Field: field, @@ -16182,7 +16470,7 @@ func (ec *executionContext) _FaultDetails_fault(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultDetails_fault(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultDetails_fault(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultDetails", Field: field, @@ -16226,7 +16514,7 @@ func (ec *executionContext) _FaultDetails_engine(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultDetails_engine(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultDetails_engine(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultDetails", Field: field, @@ -16270,7 +16558,7 @@ func (ec *executionContext) _FaultDetails_csv(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultDetails_csv(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultDetails_csv(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultDetails", Field: field, @@ -16314,7 +16602,7 @@ func (ec *executionContext) _FaultList_name(ctx context.Context, field graphql.C return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultList_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultList_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultList", Field: field, @@ -16358,7 +16646,7 @@ func (ec *executionContext) _FaultList_displayName(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultList_displayName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultList_displayName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultList", Field: field, @@ -16402,7 +16690,7 @@ func (ec *executionContext) _FaultList_description(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultList_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultList_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultList", Field: field, @@ -16443,7 +16731,7 @@ func (ec *executionContext) _FaultList_plan(ctx context.Context, field graphql.C return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_FaultList_plan(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_FaultList_plan(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "FaultList", Field: field, @@ -16487,7 +16775,7 @@ func (ec *executionContext) _GET_criteria(ctx context.Context, field graphql.Col return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GET_criteria(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GET_criteria(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GET", Field: field, @@ -16531,7 +16819,7 @@ func (ec *executionContext) _GET_responseCode(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GET_responseCode(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GET_responseCode(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GET", Field: field, @@ -16575,7 +16863,7 @@ func (ec *executionContext) _GetChaosHubStatsResponse_totalChaosHubs(ctx context return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetChaosHubStatsResponse_totalChaosHubs(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetChaosHubStatsResponse_totalChaosHubs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetChaosHubStatsResponse", Field: field, @@ -16619,7 +16907,7 @@ func (ec *executionContext) _GetExperimentResponse_experimentDetails(ctx context return ec.marshalNExperiment2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExperiment(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentResponse_experimentDetails(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentResponse_experimentDetails(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentResponse", Field: field, @@ -16696,7 +16984,7 @@ func (ec *executionContext) _GetExperimentResponse_averageResiliencyScore(ctx co return ec.marshalOFloat2ᚖfloat64(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentResponse_averageResiliencyScore(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentResponse_averageResiliencyScore(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentResponse", Field: field, @@ -16740,7 +17028,7 @@ func (ec *executionContext) _GetExperimentRunStatsResponse_totalExperimentRuns(c return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentRunStatsResponse", Field: field, @@ -16784,7 +17072,7 @@ func (ec *executionContext) _GetExperimentRunStatsResponse_totalCompletedExperim return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalCompletedExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalCompletedExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentRunStatsResponse", Field: field, @@ -16828,7 +17116,7 @@ func (ec *executionContext) _GetExperimentRunStatsResponse_totalTerminatedExperi return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalTerminatedExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalTerminatedExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentRunStatsResponse", Field: field, @@ -16872,7 +17160,7 @@ func (ec *executionContext) _GetExperimentRunStatsResponse_totalRunningExperimen return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalRunningExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalRunningExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentRunStatsResponse", Field: field, @@ -16916,7 +17204,7 @@ func (ec *executionContext) _GetExperimentRunStatsResponse_totalStoppedExperimen return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalStoppedExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalStoppedExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentRunStatsResponse", Field: field, @@ -16960,7 +17248,7 @@ func (ec *executionContext) _GetExperimentRunStatsResponse_totalErroredExperimen return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalErroredExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentRunStatsResponse_totalErroredExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentRunStatsResponse", Field: field, @@ -17004,7 +17292,7 @@ func (ec *executionContext) _GetExperimentStatsResponse_totalExperiments(ctx con return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentStatsResponse_totalExperiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentStatsResponse_totalExperiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentStatsResponse", Field: field, @@ -17048,7 +17336,7 @@ func (ec *executionContext) _GetExperimentStatsResponse_totalExpCategorizedByRes return ec.marshalNResilienceScoreCategory2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐResilienceScoreCategory(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetExperimentStatsResponse_totalExpCategorizedByResiliencyScore(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetExperimentStatsResponse_totalExpCategorizedByResiliencyScore(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetExperimentStatsResponse", Field: field, @@ -17098,7 +17386,7 @@ func (ec *executionContext) _GetInfraStatsResponse_totalInfrastructures(ctx cont return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalInfrastructures(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalInfrastructures(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetInfraStatsResponse", Field: field, @@ -17142,7 +17430,7 @@ func (ec *executionContext) _GetInfraStatsResponse_totalActiveInfrastructure(ctx return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalActiveInfrastructure(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalActiveInfrastructure(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetInfraStatsResponse", Field: field, @@ -17186,7 +17474,7 @@ func (ec *executionContext) _GetInfraStatsResponse_totalInactiveInfrastructures( return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalInactiveInfrastructures(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalInactiveInfrastructures(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetInfraStatsResponse", Field: field, @@ -17230,7 +17518,7 @@ func (ec *executionContext) _GetInfraStatsResponse_totalConfirmedInfrastructure( return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalConfirmedInfrastructure(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalConfirmedInfrastructure(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetInfraStatsResponse", Field: field, @@ -17274,7 +17562,7 @@ func (ec *executionContext) _GetInfraStatsResponse_totalNonConfirmedInfrastructu return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalNonConfirmedInfrastructures(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetInfraStatsResponse_totalNonConfirmedInfrastructures(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetInfraStatsResponse", Field: field, @@ -17318,7 +17606,7 @@ func (ec *executionContext) _GetProbeReferenceResponse_projectID(ctx context.Con return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbeReferenceResponse_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbeReferenceResponse_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbeReferenceResponse", Field: field, @@ -17362,7 +17650,7 @@ func (ec *executionContext) _GetProbeReferenceResponse_name(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbeReferenceResponse_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbeReferenceResponse_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbeReferenceResponse", Field: field, @@ -17406,7 +17694,7 @@ func (ec *executionContext) _GetProbeReferenceResponse_totalRuns(ctx context.Con return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbeReferenceResponse_totalRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbeReferenceResponse_totalRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbeReferenceResponse", Field: field, @@ -17450,7 +17738,7 @@ func (ec *executionContext) _GetProbeReferenceResponse_recentExecutions(ctx cont return ec.marshalNRecentExecutions2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐRecentExecutions(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbeReferenceResponse_recentExecutions(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbeReferenceResponse_recentExecutions(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbeReferenceResponse", Field: field, @@ -17502,7 +17790,7 @@ func (ec *executionContext) _GetProbesInExperimentRunResponse_probe(ctx context. return ec.marshalNProbe2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐProbe(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbesInExperimentRunResponse_probe(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbesInExperimentRunResponse_probe(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbesInExperimentRunResponse", Field: field, @@ -17580,7 +17868,7 @@ func (ec *executionContext) _GetProbesInExperimentRunResponse_mode(ctx context.C return ec.marshalNMode2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐMode(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbesInExperimentRunResponse_mode(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbesInExperimentRunResponse_mode(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbesInExperimentRunResponse", Field: field, @@ -17624,7 +17912,7 @@ func (ec *executionContext) _GetProbesInExperimentRunResponse_status(ctx context return ec.marshalNStatus2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐStatus(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GetProbesInExperimentRunResponse_status(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GetProbesInExperimentRunResponse_status(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GetProbesInExperimentRunResponse", Field: field, @@ -17674,7 +17962,7 @@ func (ec *executionContext) _GitConfigResponse_enabled(ctx context.Context, fiel return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_enabled(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_enabled(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17718,7 +18006,7 @@ func (ec *executionContext) _GitConfigResponse_projectID(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17759,7 +18047,7 @@ func (ec *executionContext) _GitConfigResponse_branch(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_branch(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_branch(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17800,7 +18088,7 @@ func (ec *executionContext) _GitConfigResponse_repoURL(ctx context.Context, fiel return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_repoURL(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_repoURL(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17841,7 +18129,7 @@ func (ec *executionContext) _GitConfigResponse_authType(ctx context.Context, fie return ec.marshalOAuthType2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐAuthType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_authType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_authType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17882,7 +18170,7 @@ func (ec *executionContext) _GitConfigResponse_token(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_token(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_token(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17923,7 +18211,7 @@ func (ec *executionContext) _GitConfigResponse_userName(ctx context.Context, fie return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_userName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_userName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -17964,7 +18252,7 @@ func (ec *executionContext) _GitConfigResponse_password(ctx context.Context, fie return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_password(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_password(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -18005,7 +18293,7 @@ func (ec *executionContext) _GitConfigResponse_sshPrivateKey(ctx context.Context return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_GitConfigResponse_sshPrivateKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_GitConfigResponse_sshPrivateKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GitConfigResponse", Field: field, @@ -18046,7 +18334,7 @@ func (ec *executionContext) _ImageRegistry_isDefault(ctx context.Context, field return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_isDefault(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_isDefault(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18090,7 +18378,7 @@ func (ec *executionContext) _ImageRegistry_imageRegistryName(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_imageRegistryName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_imageRegistryName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18134,7 +18422,7 @@ func (ec *executionContext) _ImageRegistry_imageRepoName(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_imageRepoName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_imageRepoName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18178,7 +18466,7 @@ func (ec *executionContext) _ImageRegistry_imageRegistryType(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_imageRegistryType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_imageRegistryType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18219,7 +18507,7 @@ func (ec *executionContext) _ImageRegistry_secretName(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_secretName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_secretName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18260,7 +18548,7 @@ func (ec *executionContext) _ImageRegistry_secretNamespace(ctx context.Context, return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_secretNamespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_secretNamespace(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18301,7 +18589,7 @@ func (ec *executionContext) _ImageRegistry_enableRegistry(ctx context.Context, f return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistry_enableRegistry(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistry_enableRegistry(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistry", Field: field, @@ -18345,7 +18633,7 @@ func (ec *executionContext) _ImageRegistryResponse_isDefault(ctx context.Context return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_isDefault(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_isDefault(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18386,7 +18674,7 @@ func (ec *executionContext) _ImageRegistryResponse_imageRegistryInfo(ctx context return ec.marshalOImageRegistry2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐImageRegistry(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_imageRegistryInfo(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_imageRegistryInfo(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18446,7 +18734,7 @@ func (ec *executionContext) _ImageRegistryResponse_imageRegistryID(ctx context.C return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_imageRegistryID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_imageRegistryID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18490,7 +18778,7 @@ func (ec *executionContext) _ImageRegistryResponse_projectID(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18531,7 +18819,7 @@ func (ec *executionContext) _ImageRegistryResponse_updatedAt(ctx context.Context return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18572,7 +18860,7 @@ func (ec *executionContext) _ImageRegistryResponse_createdAt(ctx context.Context return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18613,7 +18901,7 @@ func (ec *executionContext) _ImageRegistryResponse_createdBy(ctx context.Context return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18662,7 +18950,7 @@ func (ec *executionContext) _ImageRegistryResponse_updatedBy(ctx context.Context return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18711,7 +18999,7 @@ func (ec *executionContext) _ImageRegistryResponse_isRemoved(ctx context.Context return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ImageRegistryResponse_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ImageRegistryResponse_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ImageRegistryResponse", Field: field, @@ -18755,7 +19043,7 @@ func (ec *executionContext) _Infra_projectID(ctx context.Context, field graphql. return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -18799,7 +19087,7 @@ func (ec *executionContext) _Infra_infraID(ctx context.Context, field graphql.Co return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_infraID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_infraID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -18843,7 +19131,7 @@ func (ec *executionContext) _Infra_name(ctx context.Context, field graphql.Colle return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -18884,7 +19172,7 @@ func (ec *executionContext) _Infra_description(ctx context.Context, field graphq return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -18925,7 +19213,7 @@ func (ec *executionContext) _Infra_tags(ctx context.Context, field graphql.Colle return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -18969,7 +19257,7 @@ func (ec *executionContext) _Infra_environmentID(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_environmentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_environmentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19013,7 +19301,7 @@ func (ec *executionContext) _Infra_platformName(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_platformName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_platformName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19057,7 +19345,7 @@ func (ec *executionContext) _Infra_isActive(ctx context.Context, field graphql.C return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_isActive(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_isActive(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19101,7 +19389,7 @@ func (ec *executionContext) _Infra_isInfraConfirmed(ctx context.Context, field g return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_isInfraConfirmed(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_isInfraConfirmed(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19145,7 +19433,7 @@ func (ec *executionContext) _Infra_isRemoved(ctx context.Context, field graphql. return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_isRemoved(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_isRemoved(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19189,7 +19477,7 @@ func (ec *executionContext) _Infra_updatedAt(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19233,7 +19521,7 @@ func (ec *executionContext) _Infra_createdAt(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19274,7 +19562,7 @@ func (ec *executionContext) _Infra_noOfExperiments(ctx context.Context, field gr return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_noOfExperiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_noOfExperiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19315,7 +19603,7 @@ func (ec *executionContext) _Infra_noOfExperimentRuns(ctx context.Context, field return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_noOfExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_noOfExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19359,7 +19647,7 @@ func (ec *executionContext) _Infra_token(ctx context.Context, field graphql.Coll return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_token(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_token(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19400,7 +19688,7 @@ func (ec *executionContext) _Infra_infraNamespace(ctx context.Context, field gra return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_infraNamespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_infraNamespace(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19441,7 +19729,7 @@ func (ec *executionContext) _Infra_serviceAccount(ctx context.Context, field gra return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_serviceAccount(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_serviceAccount(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19485,7 +19773,7 @@ func (ec *executionContext) _Infra_infraScope(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_infraScope(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_infraScope(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19526,7 +19814,7 @@ func (ec *executionContext) _Infra_infraNsExists(ctx context.Context, field grap return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_infraNsExists(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_infraNsExists(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19567,7 +19855,7 @@ func (ec *executionContext) _Infra_infraSaExists(ctx context.Context, field grap return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_infraSaExists(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_infraSaExists(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19608,7 +19896,7 @@ func (ec *executionContext) _Infra_lastExperimentTimestamp(ctx context.Context, return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_lastExperimentTimestamp(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_lastExperimentTimestamp(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19652,7 +19940,7 @@ func (ec *executionContext) _Infra_startTime(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_startTime(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_startTime(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19696,7 +19984,7 @@ func (ec *executionContext) _Infra_version(ctx context.Context, field graphql.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_version(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_version(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19737,7 +20025,7 @@ func (ec *executionContext) _Infra_createdBy(ctx context.Context, field graphql. return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19786,7 +20074,7 @@ func (ec *executionContext) _Infra_updatedBy(ctx context.Context, field graphql. return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19835,7 +20123,7 @@ func (ec *executionContext) _Infra_infraType(ctx context.Context, field graphql. return ec.marshalOInfrastructureType2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfrastructureType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_infraType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_infraType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19879,7 +20167,7 @@ func (ec *executionContext) _Infra_updateStatus(ctx context.Context, field graph return ec.marshalNUpdateStatus2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUpdateStatus(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Infra_updateStatus(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Infra_updateStatus(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Infra", Field: field, @@ -19923,7 +20211,7 @@ func (ec *executionContext) _InfraActionResponse_projectID(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraActionResponse_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraActionResponse_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraActionResponse", Field: field, @@ -19967,7 +20255,7 @@ func (ec *executionContext) _InfraActionResponse_action(ctx context.Context, fie return ec.marshalNActionPayload2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐActionPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraActionResponse_action(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraActionResponse_action(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraActionResponse", Field: field, @@ -20025,7 +20313,7 @@ func (ec *executionContext) _InfraEventResponse_eventID(ctx context.Context, fie return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraEventResponse_eventID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraEventResponse_eventID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraEventResponse", Field: field, @@ -20069,7 +20357,7 @@ func (ec *executionContext) _InfraEventResponse_eventType(ctx context.Context, f return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraEventResponse_eventType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraEventResponse_eventType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraEventResponse", Field: field, @@ -20113,7 +20401,7 @@ func (ec *executionContext) _InfraEventResponse_eventName(ctx context.Context, f return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraEventResponse_eventName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraEventResponse_eventName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraEventResponse", Field: field, @@ -20157,7 +20445,7 @@ func (ec *executionContext) _InfraEventResponse_description(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraEventResponse_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraEventResponse_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraEventResponse", Field: field, @@ -20201,7 +20489,7 @@ func (ec *executionContext) _InfraEventResponse_infra(ctx context.Context, field return ec.marshalNInfra2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfra(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraEventResponse_infra(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraEventResponse_infra(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraEventResponse", Field: field, @@ -20301,7 +20589,7 @@ func (ec *executionContext) _InfraVersionDetails_latestVersion(ctx context.Conte return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraVersionDetails_latestVersion(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraVersionDetails_latestVersion(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraVersionDetails", Field: field, @@ -20345,7 +20633,7 @@ func (ec *executionContext) _InfraVersionDetails_compatibleVersions(ctx context. return ec.marshalNString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_InfraVersionDetails_compatibleVersions(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_InfraVersionDetails_compatibleVersions(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "InfraVersionDetails", Field: field, @@ -20389,7 +20677,7 @@ func (ec *executionContext) _K8SProbe_probeTimeout(ctx context.Context, field gr return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_probeTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_probeTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20433,7 +20721,7 @@ func (ec *executionContext) _K8SProbe_interval(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_interval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_interval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20474,7 +20762,7 @@ func (ec *executionContext) _K8SProbe_retry(ctx context.Context, field graphql.C return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_retry(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_retry(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20515,7 +20803,7 @@ func (ec *executionContext) _K8SProbe_attempt(ctx context.Context, field graphql return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_attempt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_attempt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20556,7 +20844,7 @@ func (ec *executionContext) _K8SProbe_probePollingInterval(ctx context.Context, return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_probePollingInterval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_probePollingInterval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20597,7 +20885,7 @@ func (ec *executionContext) _K8SProbe_initialDelay(ctx context.Context, field gr return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_initialDelay(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_initialDelay(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20638,7 +20926,7 @@ func (ec *executionContext) _K8SProbe_evaluationTimeout(ctx context.Context, fie return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_evaluationTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_evaluationTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20679,7 +20967,7 @@ func (ec *executionContext) _K8SProbe_stopOnFailure(ctx context.Context, field g return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_stopOnFailure(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_stopOnFailure(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20720,7 +21008,7 @@ func (ec *executionContext) _K8SProbe_group(ctx context.Context, field graphql.C return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_group(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_group(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20764,7 +21052,7 @@ func (ec *executionContext) _K8SProbe_version(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_version(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_version(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20808,7 +21096,7 @@ func (ec *executionContext) _K8SProbe_resource(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_resource(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_resource(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20849,7 +21137,7 @@ func (ec *executionContext) _K8SProbe_namespace(ctx context.Context, field graph return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_namespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_namespace(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20890,7 +21178,7 @@ func (ec *executionContext) _K8SProbe_resourceNames(ctx context.Context, field g return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_resourceNames(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_resourceNames(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20931,7 +21219,7 @@ func (ec *executionContext) _K8SProbe_fieldSelector(ctx context.Context, field g return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_fieldSelector(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_fieldSelector(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -20972,7 +21260,7 @@ func (ec *executionContext) _K8SProbe_labelSelector(ctx context.Context, field g return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_labelSelector(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_labelSelector(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -21016,7 +21304,7 @@ func (ec *executionContext) _K8SProbe_operation(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_K8SProbe_operation(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_K8SProbe_operation(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "K8SProbe", Field: field, @@ -21029,6 +21317,142 @@ func (ec *executionContext) fieldContext_K8SProbe_operation(ctx context.Context, return fc, nil } +func (ec *executionContext) _KubeNamespace_name(ctx context.Context, field graphql.CollectedField, obj *model.KubeNamespace) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_KubeNamespace_name(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Name, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_KubeNamespace_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "KubeNamespace", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _KubeNamespaceResponse_infraID(ctx context.Context, field graphql.CollectedField, obj *model.KubeNamespaceResponse) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_KubeNamespaceResponse_infraID(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.InfraID, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNID2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_KubeNamespaceResponse_infraID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "KubeNamespaceResponse", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type ID does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _KubeNamespaceResponse_kubeNamespace(ctx context.Context, field graphql.CollectedField, obj *model.KubeNamespaceResponse) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_KubeNamespaceResponse_kubeNamespace(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.KubeNamespace, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]*model.KubeNamespace) + fc.Result = res + return ec.marshalNKubeNamespace2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespace(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_KubeNamespaceResponse_kubeNamespace(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "KubeNamespaceResponse", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_KubeNamespace_name(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type KubeNamespace", field.Name) + }, + } + return fc, nil +} + func (ec *executionContext) _KubeObject_namespace(ctx context.Context, field graphql.CollectedField, obj *model.KubeObject) (ret graphql.Marshaler) { fc, err := ec.fieldContext_KubeObject_namespace(ctx, field) if err != nil { @@ -21060,7 +21484,7 @@ func (ec *executionContext) _KubeObject_namespace(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubeObject_namespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubeObject_namespace(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubeObject", Field: field, @@ -21104,7 +21528,7 @@ func (ec *executionContext) _KubeObject_data(ctx context.Context, field graphql. return ec.marshalNObjectData2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐObjectData(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubeObject_data(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubeObject_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubeObject", Field: field, @@ -21154,7 +21578,7 @@ func (ec *executionContext) _KubeObjectResponse_infraID(ctx context.Context, fie return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubeObjectResponse_infraID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubeObjectResponse_infraID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubeObjectResponse", Field: field, @@ -21193,12 +21617,12 @@ func (ec *executionContext) _KubeObjectResponse_kubeObj(ctx context.Context, fie } return graphql.Null } - res := resTmp.([]*model.KubeObject) + res := resTmp.(*model.KubeObject) fc.Result = res - return ec.marshalNKubeObject2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObject(ctx, field.Selections, res) + return ec.marshalNKubeObject2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObject(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubeObjectResponse_kubeObj(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubeObjectResponse_kubeObj(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubeObjectResponse", Field: field, @@ -21248,7 +21672,7 @@ func (ec *executionContext) _KubernetesCMDProbe_probeTimeout(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_probeTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_probeTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21292,7 +21716,7 @@ func (ec *executionContext) _KubernetesCMDProbe_interval(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_interval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_interval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21333,7 +21757,7 @@ func (ec *executionContext) _KubernetesCMDProbe_retry(ctx context.Context, field return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_retry(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_retry(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21374,7 +21798,7 @@ func (ec *executionContext) _KubernetesCMDProbe_attempt(ctx context.Context, fie return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_attempt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_attempt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21415,7 +21839,7 @@ func (ec *executionContext) _KubernetesCMDProbe_probePollingInterval(ctx context return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_probePollingInterval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_probePollingInterval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21456,7 +21880,7 @@ func (ec *executionContext) _KubernetesCMDProbe_initialDelay(ctx context.Context return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_initialDelay(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_initialDelay(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21497,7 +21921,7 @@ func (ec *executionContext) _KubernetesCMDProbe_evaluationTimeout(ctx context.Co return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_evaluationTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_evaluationTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21538,7 +21962,7 @@ func (ec *executionContext) _KubernetesCMDProbe_stopOnFailure(ctx context.Contex return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_stopOnFailure(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_stopOnFailure(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21582,7 +22006,7 @@ func (ec *executionContext) _KubernetesCMDProbe_command(ctx context.Context, fie return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_command(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_command(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21626,7 +22050,7 @@ func (ec *executionContext) _KubernetesCMDProbe_comparator(ctx context.Context, return ec.marshalNComparator2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐComparator(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_comparator(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_comparator(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21675,7 +22099,7 @@ func (ec *executionContext) _KubernetesCMDProbe_source(ctx context.Context, fiel return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesCMDProbe_source(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesCMDProbe_source(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesCMDProbe", Field: field, @@ -21719,7 +22143,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_probeTimeout(ctx context.Contex return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_probeTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_probeTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -21763,7 +22187,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_interval(ctx context.Context, f return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_interval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_interval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -21804,7 +22228,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_retry(ctx context.Context, fiel return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_retry(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_retry(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -21845,7 +22269,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_attempt(ctx context.Context, fi return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_attempt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_attempt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -21886,7 +22310,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_probePollingInterval(ctx contex return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_probePollingInterval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_probePollingInterval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -21927,7 +22351,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_initialDelay(ctx context.Contex return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_initialDelay(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_initialDelay(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -21968,7 +22392,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_evaluationTimeout(ctx context.C return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_evaluationTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_evaluationTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -22009,7 +22433,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_stopOnFailure(ctx context.Conte return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_stopOnFailure(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_stopOnFailure(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -22053,7 +22477,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_url(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_url(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_url(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -22097,7 +22521,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_method(ctx context.Context, fie return ec.marshalNMethod2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐMethod(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_method(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_method(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -22144,7 +22568,7 @@ func (ec *executionContext) _KubernetesHTTPProbe_insecureSkipVerify(ctx context. return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_KubernetesHTTPProbe_insecureSkipVerify(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_KubernetesHTTPProbe_insecureSkipVerify(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "KubernetesHTTPProbe", Field: field, @@ -22188,7 +22612,7 @@ func (ec *executionContext) _Link_name(ctx context.Context, field graphql.Collec return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Link_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Link_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Link", Field: field, @@ -22232,7 +22656,7 @@ func (ec *executionContext) _Link_url(ctx context.Context, field graphql.Collect return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Link_url(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Link_url(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Link", Field: field, @@ -22276,7 +22700,7 @@ func (ec *executionContext) _ListEnvironmentResponse_totalNoOfEnvironments(ctx c return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListEnvironmentResponse_totalNoOfEnvironments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListEnvironmentResponse_totalNoOfEnvironments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListEnvironmentResponse", Field: field, @@ -22317,7 +22741,7 @@ func (ec *executionContext) _ListEnvironmentResponse_environments(ctx context.Co return ec.marshalOEnvironment2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐEnvironment(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListEnvironmentResponse_environments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListEnvironmentResponse_environments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListEnvironmentResponse", Field: field, @@ -22387,7 +22811,7 @@ func (ec *executionContext) _ListExperimentResponse_totalNoOfExperiments(ctx con return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListExperimentResponse_totalNoOfExperiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListExperimentResponse_totalNoOfExperiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListExperimentResponse", Field: field, @@ -22431,7 +22855,7 @@ func (ec *executionContext) _ListExperimentResponse_experiments(ctx context.Cont return ec.marshalNExperiment2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExperiment(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListExperimentResponse_experiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListExperimentResponse_experiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListExperimentResponse", Field: field, @@ -22511,7 +22935,7 @@ func (ec *executionContext) _ListExperimentRunResponse_totalNoOfExperimentRuns(c return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListExperimentRunResponse_totalNoOfExperimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListExperimentRunResponse_totalNoOfExperimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListExperimentRunResponse", Field: field, @@ -22555,7 +22979,7 @@ func (ec *executionContext) _ListExperimentRunResponse_experimentRuns(ctx contex return ec.marshalNExperimentRun2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExperimentRun(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListExperimentRunResponse_experimentRuns(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListExperimentRunResponse_experimentRuns(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListExperimentRunResponse", Field: field, @@ -22649,7 +23073,7 @@ func (ec *executionContext) _ListInfraResponse_totalNoOfInfras(ctx context.Conte return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListInfraResponse_totalNoOfInfras(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListInfraResponse_totalNoOfInfras(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListInfraResponse", Field: field, @@ -22693,7 +23117,7 @@ func (ec *executionContext) _ListInfraResponse_infras(ctx context.Context, field return ec.marshalNInfra2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfra(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ListInfraResponse_infras(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ListInfraResponse_infras(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ListInfraResponse", Field: field, @@ -22793,7 +23217,7 @@ func (ec *executionContext) _Maintainer_name(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Maintainer_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Maintainer_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Maintainer", Field: field, @@ -22837,7 +23261,7 @@ func (ec *executionContext) _Maintainer_email(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Maintainer_email(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Maintainer_email(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Maintainer", Field: field, @@ -22881,7 +23305,7 @@ func (ec *executionContext) _Metadata_name(ctx context.Context, field graphql.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Metadata_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Metadata_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Metadata", Field: field, @@ -22925,7 +23349,7 @@ func (ec *executionContext) _Metadata_version(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Metadata_version(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Metadata_version(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Metadata", Field: field, @@ -22969,7 +23393,7 @@ func (ec *executionContext) _Metadata_annotations(ctx context.Context, field gra return ec.marshalNAnnotation2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐAnnotation(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Metadata_annotations(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Metadata_annotations(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Metadata", Field: field, @@ -23024,7 +23448,7 @@ func (ec *executionContext) _Method_get(ctx context.Context, field graphql.Colle return ec.marshalOGET2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐGet(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Method_get(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Method_get(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Method", Field: field, @@ -23071,7 +23495,7 @@ func (ec *executionContext) _Method_post(ctx context.Context, field graphql.Coll return ec.marshalOPOST2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐPost(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Method_post(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Method_post(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Method", Field: field, @@ -23980,6 +24404,61 @@ func (ec *executionContext) fieldContext_Mutation_kubeObj(ctx context.Context, f return fc, nil } +func (ec *executionContext) _Mutation_kubeNamespace(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_kubeNamespace(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().KubeNamespace(rctx, fc.Args["request"].(model.KubeNamespaceData)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_kubeNamespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_kubeNamespace_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + func (ec *executionContext) _Mutation_addChaosHub(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { fc, err := ec.fieldContext_Mutation_addChaosHub(ctx, field) if err != nil { @@ -24045,6 +24524,8 @@ func (ec *executionContext) fieldContext_Mutation_addChaosHub(ctx context.Contex return ec.fieldContext_ChaosHub_repoURL(ctx, field) case "repoBranch": return ec.fieldContext_ChaosHub_repoBranch(ctx, field) + case "remoteHub": + return ec.fieldContext_ChaosHub_remoteHub(ctx, field) case "projectID": return ec.fieldContext_ChaosHub_projectID(ctx, field) case "isDefault": @@ -24164,6 +24645,8 @@ func (ec *executionContext) fieldContext_Mutation_addRemoteChaosHub(ctx context. return ec.fieldContext_ChaosHub_repoURL(ctx, field) case "repoBranch": return ec.fieldContext_ChaosHub_repoBranch(ctx, field) + case "remoteHub": + return ec.fieldContext_ChaosHub_remoteHub(ctx, field) case "projectID": return ec.fieldContext_ChaosHub_projectID(ctx, field) case "isDefault": @@ -24283,6 +24766,8 @@ func (ec *executionContext) fieldContext_Mutation_saveChaosHub(ctx context.Conte return ec.fieldContext_ChaosHub_repoURL(ctx, field) case "repoBranch": return ec.fieldContext_ChaosHub_repoBranch(ctx, field) + case "remoteHub": + return ec.fieldContext_ChaosHub_remoteHub(ctx, field) case "projectID": return ec.fieldContext_ChaosHub_projectID(ctx, field) case "isDefault": @@ -24463,7 +24948,7 @@ func (ec *executionContext) _Mutation_generateSSHKey(ctx context.Context, field return ec.marshalNSSHKey2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐSSHKey(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_generateSSHKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_generateSSHKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -24547,6 +25032,8 @@ func (ec *executionContext) fieldContext_Mutation_updateChaosHub(ctx context.Con return ec.fieldContext_ChaosHub_repoURL(ctx, field) case "repoBranch": return ec.fieldContext_ChaosHub_repoBranch(ctx, field) + case "remoteHub": + return ec.fieldContext_ChaosHub_remoteHub(ctx, field) case "projectID": return ec.fieldContext_ChaosHub_projectID(ctx, field) case "isDefault": @@ -25756,7 +26243,7 @@ func (ec *executionContext) _ObjectData_labels(ctx context.Context, field graphq return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ObjectData_labels(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ObjectData_labels(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ObjectData", Field: field, @@ -25800,7 +26287,7 @@ func (ec *executionContext) _ObjectData_name(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ObjectData_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ObjectData_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ObjectData", Field: field, @@ -25841,7 +26328,7 @@ func (ec *executionContext) _POST_contentType(ctx context.Context, field graphql return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_POST_contentType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_POST_contentType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "POST", Field: field, @@ -25882,7 +26369,7 @@ func (ec *executionContext) _POST_body(ctx context.Context, field graphql.Collec return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_POST_body(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_POST_body(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "POST", Field: field, @@ -25923,7 +26410,7 @@ func (ec *executionContext) _POST_bodyPath(ctx context.Context, field graphql.Co return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_POST_bodyPath(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_POST_bodyPath(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "POST", Field: field, @@ -25967,7 +26454,7 @@ func (ec *executionContext) _POST_criteria(ctx context.Context, field graphql.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_POST_criteria(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_POST_criteria(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "POST", Field: field, @@ -26011,7 +26498,7 @@ func (ec *executionContext) _POST_responseCode(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_POST_responseCode(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_POST_responseCode(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "POST", Field: field, @@ -26055,7 +26542,7 @@ func (ec *executionContext) _PROMProbe_probeTimeout(ctx context.Context, field g return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_probeTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_probeTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26099,7 +26586,7 @@ func (ec *executionContext) _PROMProbe_interval(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_interval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_interval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26140,7 +26627,7 @@ func (ec *executionContext) _PROMProbe_retry(ctx context.Context, field graphql. return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_retry(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_retry(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26181,7 +26668,7 @@ func (ec *executionContext) _PROMProbe_attempt(ctx context.Context, field graphq return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_attempt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_attempt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26222,7 +26709,7 @@ func (ec *executionContext) _PROMProbe_probePollingInterval(ctx context.Context, return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_probePollingInterval(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_probePollingInterval(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26263,7 +26750,7 @@ func (ec *executionContext) _PROMProbe_initialDelay(ctx context.Context, field g return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_initialDelay(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_initialDelay(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26304,7 +26791,7 @@ func (ec *executionContext) _PROMProbe_evaluationTimeout(ctx context.Context, fi return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_evaluationTimeout(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_evaluationTimeout(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26345,7 +26832,7 @@ func (ec *executionContext) _PROMProbe_stopOnFailure(ctx context.Context, field return ec.marshalOBoolean2ᚖbool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_stopOnFailure(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_stopOnFailure(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26389,7 +26876,7 @@ func (ec *executionContext) _PROMProbe_endpoint(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_endpoint(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_endpoint(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26430,7 +26917,7 @@ func (ec *executionContext) _PROMProbe_query(ctx context.Context, field graphql. return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_query(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_query(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26471,7 +26958,7 @@ func (ec *executionContext) _PROMProbe_queryPath(ctx context.Context, field grap return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_queryPath(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_queryPath(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26515,7 +27002,7 @@ func (ec *executionContext) _PROMProbe_comparator(ctx context.Context, field gra return ec.marshalNComparator2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐComparator(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PROMProbe_comparator(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PROMProbe_comparator(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PROMProbe", Field: field, @@ -26567,7 +27054,7 @@ func (ec *executionContext) _PackageInformation_packageName(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PackageInformation_packageName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PackageInformation_packageName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PackageInformation", Field: field, @@ -26611,7 +27098,7 @@ func (ec *executionContext) _PackageInformation_experiments(ctx context.Context, return ec.marshalNExperiments2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExperimentsᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PackageInformation_experiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PackageInformation_experiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PackageInformation", Field: field, @@ -26663,7 +27150,7 @@ func (ec *executionContext) _PodLogResponse_experimentRunID(ctx context.Context, return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PodLogResponse_experimentRunID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PodLogResponse_experimentRunID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PodLogResponse", Field: field, @@ -26707,7 +27194,7 @@ func (ec *executionContext) _PodLogResponse_podName(ctx context.Context, field g return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PodLogResponse_podName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PodLogResponse_podName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PodLogResponse", Field: field, @@ -26751,7 +27238,7 @@ func (ec *executionContext) _PodLogResponse_podType(ctx context.Context, field g return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PodLogResponse_podType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PodLogResponse_podType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PodLogResponse", Field: field, @@ -26795,7 +27282,7 @@ func (ec *executionContext) _PodLogResponse_log(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PodLogResponse_log(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PodLogResponse_log(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PodLogResponse", Field: field, @@ -26839,7 +27326,7 @@ func (ec *executionContext) _PredefinedExperimentList_experimentName(ctx context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PredefinedExperimentList_experimentName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PredefinedExperimentList_experimentName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PredefinedExperimentList", Field: field, @@ -26883,7 +27370,7 @@ func (ec *executionContext) _PredefinedExperimentList_experimentCSV(ctx context. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PredefinedExperimentList_experimentCSV(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PredefinedExperimentList_experimentCSV(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PredefinedExperimentList", Field: field, @@ -26927,7 +27414,7 @@ func (ec *executionContext) _PredefinedExperimentList_experimentManifest(ctx con return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_PredefinedExperimentList_experimentManifest(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_PredefinedExperimentList_experimentManifest(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "PredefinedExperimentList", Field: field, @@ -26971,7 +27458,7 @@ func (ec *executionContext) _Probe_projectID(ctx context.Context, field graphql. return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27015,7 +27502,7 @@ func (ec *executionContext) _Probe_name(ctx context.Context, field graphql.Colle return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27056,7 +27543,7 @@ func (ec *executionContext) _Probe_description(ctx context.Context, field graphq return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27097,7 +27584,7 @@ func (ec *executionContext) _Probe_tags(ctx context.Context, field graphql.Colle return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_tags(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27141,7 +27628,7 @@ func (ec *executionContext) _Probe_type(ctx context.Context, field graphql.Colle return ec.marshalNProbeType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐProbeType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27185,7 +27672,7 @@ func (ec *executionContext) _Probe_infrastructureType(ctx context.Context, field return ec.marshalNInfrastructureType2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfrastructureType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_infrastructureType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_infrastructureType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27226,7 +27713,7 @@ func (ec *executionContext) _Probe_kubernetesHTTPProperties(ctx context.Context, return ec.marshalOKubernetesHTTPProbe2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubernetesHTTPProbe(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_kubernetesHTTPProperties(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_kubernetesHTTPProperties(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27291,7 +27778,7 @@ func (ec *executionContext) _Probe_kubernetesCMDProperties(ctx context.Context, return ec.marshalOKubernetesCMDProbe2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubernetesCMDProbe(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_kubernetesCMDProperties(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_kubernetesCMDProperties(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27356,7 +27843,7 @@ func (ec *executionContext) _Probe_k8sProperties(ctx context.Context, field grap return ec.marshalOK8SProbe2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐK8SProbe(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_k8sProperties(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_k8sProperties(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27431,7 +27918,7 @@ func (ec *executionContext) _Probe_promProperties(ctx context.Context, field gra return ec.marshalOPROMProbe2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐPROMProbe(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_promProperties(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_promProperties(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27498,7 +27985,7 @@ func (ec *executionContext) _Probe_recentExecutions(ctx context.Context, field g return ec.marshalOProbeRecentExecutions2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐProbeRecentExecutionsᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_recentExecutions(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_recentExecutions(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27547,7 +28034,7 @@ func (ec *executionContext) _Probe_referencedBy(ctx context.Context, field graph return ec.marshalOInt2ᚖint(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_referencedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_referencedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27591,7 +28078,7 @@ func (ec *executionContext) _Probe_updatedAt(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27635,7 +28122,7 @@ func (ec *executionContext) _Probe_createdAt(ctx context.Context, field graphql. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27676,7 +28163,7 @@ func (ec *executionContext) _Probe_updatedBy(ctx context.Context, field graphql. return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27725,7 +28212,7 @@ func (ec *executionContext) _Probe_createdBy(ctx context.Context, field graphql. return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Probe_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Probe_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Probe", Field: field, @@ -27777,7 +28264,7 @@ func (ec *executionContext) _ProbeRecentExecutions_faultName(ctx context.Context return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ProbeRecentExecutions_faultName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ProbeRecentExecutions_faultName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ProbeRecentExecutions", Field: field, @@ -27821,7 +28308,7 @@ func (ec *executionContext) _ProbeRecentExecutions_status(ctx context.Context, f return ec.marshalNStatus2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐStatus(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ProbeRecentExecutions_status(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ProbeRecentExecutions_status(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ProbeRecentExecutions", Field: field, @@ -27871,7 +28358,7 @@ func (ec *executionContext) _ProbeRecentExecutions_executedByExperiment(ctx cont return ec.marshalNExecutedByExperiment2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExecutedByExperiment(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ProbeRecentExecutions_executedByExperiment(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ProbeRecentExecutions_executedByExperiment(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ProbeRecentExecutions", Field: field, @@ -27925,7 +28412,7 @@ func (ec *executionContext) _Provider_name(ctx context.Context, field graphql.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Provider_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Provider_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Provider", Field: field, @@ -28973,7 +29460,7 @@ func (ec *executionContext) _Query_getServerVersion(ctx context.Context, field g return ec.marshalNServerVersionResponse2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐServerVersionResponse(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Query_getServerVersion(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Query_getServerVersion(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", Field: field, @@ -29227,6 +29714,8 @@ func (ec *executionContext) fieldContext_Query_listChaosHub(ctx context.Context, return ec.fieldContext_ChaosHubStatus_repoURL(ctx, field) case "repoBranch": return ec.fieldContext_ChaosHubStatus_repoBranch(ctx, field) + case "remoteHub": + return ec.fieldContext_ChaosHubStatus_remoteHub(ctx, field) case "isAvailable": return ec.fieldContext_ChaosHubStatus_isAvailable(ctx, field) case "totalFaults": @@ -29352,6 +29841,8 @@ func (ec *executionContext) fieldContext_Query_getChaosHub(ctx context.Context, return ec.fieldContext_ChaosHubStatus_repoURL(ctx, field) case "repoBranch": return ec.fieldContext_ChaosHubStatus_repoBranch(ctx, field) + case "remoteHub": + return ec.fieldContext_ChaosHubStatus_remoteHub(ctx, field) case "isAvailable": return ec.fieldContext_ChaosHubStatus_isAvailable(ctx, field) case "totalFaults": @@ -30753,7 +31244,7 @@ func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.C return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Query___schema(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Query___schema(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", Field: field, @@ -30811,7 +31302,7 @@ func (ec *executionContext) _RecentExecutions_faultName(ctx context.Context, fie return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExecutions_faultName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExecutions_faultName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExecutions", Field: field, @@ -30855,7 +31346,7 @@ func (ec *executionContext) _RecentExecutions_mode(ctx context.Context, field gr return ec.marshalNMode2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐMode(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExecutions_mode(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExecutions_mode(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExecutions", Field: field, @@ -30899,7 +31390,7 @@ func (ec *executionContext) _RecentExecutions_executionHistory(ctx context.Conte return ec.marshalNExecutionHistory2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐExecutionHistoryᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExecutions_executionHistory(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExecutions_executionHistory(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExecutions", Field: field, @@ -30953,7 +31444,7 @@ func (ec *executionContext) _RecentExperimentRun_experimentRunID(ctx context.Con return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_experimentRunID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_experimentRunID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -30997,7 +31488,7 @@ func (ec *executionContext) _RecentExperimentRun_phase(ctx context.Context, fiel return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_phase(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_phase(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31038,7 +31529,7 @@ func (ec *executionContext) _RecentExperimentRun_resiliencyScore(ctx context.Con return ec.marshalOFloat2ᚖfloat64(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_resiliencyScore(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_resiliencyScore(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31082,7 +31573,7 @@ func (ec *executionContext) _RecentExperimentRun_updatedAt(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_updatedAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31126,7 +31617,7 @@ func (ec *executionContext) _RecentExperimentRun_createdAt(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_createdAt(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31167,7 +31658,7 @@ func (ec *executionContext) _RecentExperimentRun_createdBy(ctx context.Context, return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_createdBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_createdBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31216,7 +31707,7 @@ func (ec *executionContext) _RecentExperimentRun_updatedBy(ctx context.Context, return ec.marshalOUserDetails2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐUserDetails(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_updatedBy(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_updatedBy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31268,7 +31759,7 @@ func (ec *executionContext) _RecentExperimentRun_runSequence(ctx context.Context return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RecentExperimentRun_runSequence(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RecentExperimentRun_runSequence(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RecentExperimentRun", Field: field, @@ -31312,7 +31803,7 @@ func (ec *executionContext) _RegisterInfraResponse_token(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RegisterInfraResponse_token(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RegisterInfraResponse_token(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RegisterInfraResponse", Field: field, @@ -31356,7 +31847,7 @@ func (ec *executionContext) _RegisterInfraResponse_infraID(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RegisterInfraResponse_infraID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RegisterInfraResponse_infraID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RegisterInfraResponse", Field: field, @@ -31400,7 +31891,7 @@ func (ec *executionContext) _RegisterInfraResponse_name(ctx context.Context, fie return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RegisterInfraResponse_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RegisterInfraResponse_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RegisterInfraResponse", Field: field, @@ -31444,7 +31935,7 @@ func (ec *executionContext) _RegisterInfraResponse_manifest(ctx context.Context, return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RegisterInfraResponse_manifest(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RegisterInfraResponse_manifest(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RegisterInfraResponse", Field: field, @@ -31488,7 +31979,7 @@ func (ec *executionContext) _ResilienceScoreCategory_id(ctx context.Context, fie return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ResilienceScoreCategory_id(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ResilienceScoreCategory_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ResilienceScoreCategory", Field: field, @@ -31532,7 +32023,7 @@ func (ec *executionContext) _ResilienceScoreCategory_count(ctx context.Context, return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ResilienceScoreCategory_count(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ResilienceScoreCategory_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ResilienceScoreCategory", Field: field, @@ -31576,7 +32067,7 @@ func (ec *executionContext) _RunChaosExperimentResponse_notifyID(ctx context.Con return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_RunChaosExperimentResponse_notifyID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_RunChaosExperimentResponse_notifyID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "RunChaosExperimentResponse", Field: field, @@ -31620,7 +32111,7 @@ func (ec *executionContext) _SSHKey_publicKey(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_SSHKey_publicKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_SSHKey_publicKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SSHKey", Field: field, @@ -31664,7 +32155,7 @@ func (ec *executionContext) _SSHKey_privateKey(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_SSHKey_privateKey(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_SSHKey_privateKey(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SSHKey", Field: field, @@ -31708,7 +32199,7 @@ func (ec *executionContext) _ServerVersionResponse_key(ctx context.Context, fiel return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ServerVersionResponse_key(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ServerVersionResponse_key(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ServerVersionResponse", Field: field, @@ -31752,7 +32243,7 @@ func (ec *executionContext) _ServerVersionResponse_value(ctx context.Context, fi return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_ServerVersionResponse_value(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_ServerVersionResponse_value(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ServerVersionResponse", Field: field, @@ -31796,7 +32287,7 @@ func (ec *executionContext) _Spec_displayName(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_displayName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_displayName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -31840,7 +32331,7 @@ func (ec *executionContext) _Spec_categoryDescription(ctx context.Context, field return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_categoryDescription(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_categoryDescription(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -31884,7 +32375,7 @@ func (ec *executionContext) _Spec_keywords(ctx context.Context, field graphql.Co return ec.marshalNString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_keywords(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_keywords(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -31928,7 +32419,7 @@ func (ec *executionContext) _Spec_maturity(ctx context.Context, field graphql.Co return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_maturity(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_maturity(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -31972,7 +32463,7 @@ func (ec *executionContext) _Spec_maintainers(ctx context.Context, field graphql return ec.marshalNMaintainer2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐMaintainerᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_maintainers(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_maintainers(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32022,7 +32513,7 @@ func (ec *executionContext) _Spec_minKubeVersion(ctx context.Context, field grap return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_minKubeVersion(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_minKubeVersion(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32066,7 +32557,7 @@ func (ec *executionContext) _Spec_provider(ctx context.Context, field graphql.Co return ec.marshalNProvider2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐProvider(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_provider(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_provider(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32114,7 +32605,7 @@ func (ec *executionContext) _Spec_links(ctx context.Context, field graphql.Colle return ec.marshalNLink2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐLinkᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_links(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_links(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32164,7 +32655,7 @@ func (ec *executionContext) _Spec_faults(ctx context.Context, field graphql.Coll return ec.marshalNFaultList2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐFaultListᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_faults(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_faults(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32215,7 +32706,7 @@ func (ec *executionContext) _Spec_experiments(ctx context.Context, field graphql return ec.marshalOString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_experiments(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_experiments(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32259,7 +32750,7 @@ func (ec *executionContext) _Spec_chaosExpCRDLink(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_chaosExpCRDLink(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_chaosExpCRDLink(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32303,7 +32794,7 @@ func (ec *executionContext) _Spec_platforms(ctx context.Context, field graphql.C return ec.marshalNString2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_platforms(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_platforms(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32344,7 +32835,7 @@ func (ec *executionContext) _Spec_chaosType(ctx context.Context, field graphql.C return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Spec_chaosType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Spec_chaosType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Spec", Field: field, @@ -32388,7 +32879,7 @@ func (ec *executionContext) _Status_verdict(ctx context.Context, field graphql.C return ec.marshalNProbeVerdict2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐProbeVerdict(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Status_verdict(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Status_verdict(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Status", Field: field, @@ -32429,7 +32920,7 @@ func (ec *executionContext) _Status_description(ctx context.Context, field graph return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Status_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Status_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Status", Field: field, @@ -32473,7 +32964,7 @@ func (ec *executionContext) _StopExperimentRunsRequest_projectID(ctx context.Con return ec.marshalNID2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_StopExperimentRunsRequest_projectID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_StopExperimentRunsRequest_projectID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "StopExperimentRunsRequest", Field: field, @@ -32517,7 +33008,7 @@ func (ec *executionContext) _StopExperimentRunsRequest_experimentID(ctx context. return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_StopExperimentRunsRequest_experimentID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_StopExperimentRunsRequest_experimentID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "StopExperimentRunsRequest", Field: field, @@ -32558,7 +33049,7 @@ func (ec *executionContext) _StopExperimentRunsRequest_experimentRunID(ctx conte return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_StopExperimentRunsRequest_experimentRunID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_StopExperimentRunsRequest_experimentRunID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "StopExperimentRunsRequest", Field: field, @@ -32901,6 +33392,81 @@ func (ec *executionContext) fieldContext_Subscription_getKubeObject(ctx context. return fc, nil } +func (ec *executionContext) _Subscription_getKubeNamespace(ctx context.Context, field graphql.CollectedField) (ret func(ctx context.Context) graphql.Marshaler) { + fc, err := ec.fieldContext_Subscription_getKubeNamespace(ctx, field) + if err != nil { + return nil + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Subscription().GetKubeNamespace(rctx, fc.Args["request"].(model.KubeNamespaceRequest)) + }) + if err != nil { + ec.Error(ctx, err) + return nil + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return nil + } + return func(ctx context.Context) graphql.Marshaler { + select { + case res, ok := <-resTmp.(<-chan *model.KubeNamespaceResponse): + if !ok { + return nil + } + return graphql.WriterFunc(func(w io.Writer) { + w.Write([]byte{'{'}) + graphql.MarshalString(field.Alias).MarshalGQL(w) + w.Write([]byte{':'}) + ec.marshalNKubeNamespaceResponse2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceResponse(ctx, field.Selections, res).MarshalGQL(w) + w.Write([]byte{'}'}) + }) + case <-ctx.Done(): + return nil + } + } +} + +func (ec *executionContext) fieldContext_Subscription_getKubeNamespace(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Subscription", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "infraID": + return ec.fieldContext_KubeNamespaceResponse_infraID(ctx, field) + case "kubeNamespace": + return ec.fieldContext_KubeNamespaceResponse_kubeNamespace(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type KubeNamespaceResponse", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Subscription_getKubeNamespace_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + func (ec *executionContext) _UserDetails_userID(ctx context.Context, field graphql.CollectedField, obj *model.UserDetails) (ret graphql.Marshaler) { fc, err := ec.fieldContext_UserDetails_userID(ctx, field) if err != nil { @@ -32932,7 +33498,7 @@ func (ec *executionContext) _UserDetails_userID(ctx context.Context, field graph return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_UserDetails_userID(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_UserDetails_userID(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "UserDetails", Field: field, @@ -32976,7 +33542,7 @@ func (ec *executionContext) _UserDetails_username(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_UserDetails_username(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_UserDetails_username(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "UserDetails", Field: field, @@ -33020,7 +33586,7 @@ func (ec *executionContext) _UserDetails_email(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_UserDetails_email(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_UserDetails_email(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "UserDetails", Field: field, @@ -33064,7 +33630,7 @@ func (ec *executionContext) _Weightages_faultName(ctx context.Context, field gra return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Weightages_faultName(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Weightages_faultName(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Weightages", Field: field, @@ -33108,7 +33674,7 @@ func (ec *executionContext) _Weightages_weightage(ctx context.Context, field gra return ec.marshalNInt2int(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Weightages_weightage(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Weightages_weightage(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Weightages", Field: field, @@ -33152,7 +33718,7 @@ func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Directive_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Directive_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Directive", Field: field, @@ -33193,7 +33759,7 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Directive_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Directive_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Directive", Field: field, @@ -33237,7 +33803,7 @@ func (ec *executionContext) ___Directive_locations(ctx context.Context, field gr return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Directive_locations(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Directive_locations(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Directive", Field: field, @@ -33281,7 +33847,7 @@ func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Directive_args(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Directive_args(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Directive", Field: field, @@ -33335,7 +33901,7 @@ func (ec *executionContext) ___Directive_isRepeatable(ctx context.Context, field return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Directive_isRepeatable(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Directive_isRepeatable(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Directive", Field: field, @@ -33379,7 +33945,7 @@ func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___EnumValue_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___EnumValue_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__EnumValue", Field: field, @@ -33420,7 +33986,7 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___EnumValue_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___EnumValue_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__EnumValue", Field: field, @@ -33464,7 +34030,7 @@ func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___EnumValue_isDeprecated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__EnumValue", Field: field, @@ -33505,7 +34071,7 @@ func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___EnumValue_deprecationReason(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__EnumValue", Field: field, @@ -33549,7 +34115,7 @@ func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.Col return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Field_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Field_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", Field: field, @@ -33590,7 +34156,7 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Field_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Field_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", Field: field, @@ -33634,7 +34200,7 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Field_args(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Field_args(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", Field: field, @@ -33688,7 +34254,7 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Field_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Field_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", Field: field, @@ -33754,7 +34320,7 @@ func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field gra return ec.marshalNBoolean2bool(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Field_isDeprecated(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Field_isDeprecated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", Field: field, @@ -33795,7 +34361,7 @@ func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, fiel return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Field_deprecationReason(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Field_deprecationReason(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", Field: field, @@ -33839,7 +34405,7 @@ func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphq return ec.marshalNString2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___InputValue_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___InputValue_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__InputValue", Field: field, @@ -33880,7 +34446,7 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___InputValue_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___InputValue_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__InputValue", Field: field, @@ -33924,7 +34490,7 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___InputValue_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___InputValue_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__InputValue", Field: field, @@ -33987,7 +34553,7 @@ func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, fiel return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___InputValue_defaultValue(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__InputValue", Field: field, @@ -34028,7 +34594,7 @@ func (ec *executionContext) ___Schema_description(ctx context.Context, field gra return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Schema_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Schema_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", Field: field, @@ -34072,7 +34638,7 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Schema_types(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Schema_types(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", Field: field, @@ -34138,7 +34704,7 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Schema_queryType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Schema_queryType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", Field: field, @@ -34201,7 +34767,7 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Schema_mutationType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Schema_mutationType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", Field: field, @@ -34264,7 +34830,7 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Schema_subscriptionType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", Field: field, @@ -34330,7 +34896,7 @@ func (ec *executionContext) ___Schema_directives(ctx context.Context, field grap return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Schema_directives(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Schema_directives(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", Field: field, @@ -34386,7 +34952,7 @@ func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.Coll return ec.marshalN__TypeKind2string(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_kind(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_kind(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34427,7 +34993,7 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34468,7 +35034,7 @@ func (ec *executionContext) ___Type_description(ctx context.Context, field graph return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34575,7 +35141,7 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_interfaces(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_interfaces(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34638,7 +35204,7 @@ func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field gra return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_possibleTypes(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_possibleTypes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34763,7 +35329,7 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_inputFields(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_inputFields(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34814,7 +35380,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_ofType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_ofType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -34877,7 +35443,7 @@ func (ec *executionContext) ___Type_specifiedByURL(ctx context.Context, field gr return ec.marshalOString2ᚖstring(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext___Type_specifiedByURL(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext___Type_specifiedByURL(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", Field: field, @@ -35136,7 +35702,7 @@ func (ec *executionContext) unmarshalInputCloningInput(ctx context.Context, obj asMap[k] = v } - fieldsInOrder := [...]string{"name", "repoBranch", "repoURL", "isPrivate", "authType", "token", "userName", "password", "sshPrivateKey", "isDefault"} + fieldsInOrder := [...]string{"name", "repoBranch", "repoURL", "remoteHub", "isPrivate", "authType", "token", "userName", "password", "sshPrivateKey", "isDefault"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -35164,6 +35730,13 @@ func (ec *executionContext) unmarshalInputCloningInput(ctx context.Context, obj return it, err } it.RepoURL = data + case "remoteHub": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("remoteHub")) + data, err := ec.unmarshalNString2string(ctx, v) + if err != nil { + return it, err + } + it.RemoteHub = data case "isPrivate": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("isPrivate")) data, err := ec.unmarshalNBoolean2bool(ctx, v) @@ -35267,7 +35840,7 @@ func (ec *executionContext) unmarshalInputCreateChaosHubRequest(ctx context.Cont asMap[k] = v } - fieldsInOrder := [...]string{"name", "tags", "description", "repoURL", "repoBranch", "isPrivate", "authType", "token", "userName", "password", "sshPrivateKey", "sshPublicKey"} + fieldsInOrder := [...]string{"name", "tags", "description", "repoURL", "repoBranch", "remoteHub", "isPrivate", "authType", "token", "userName", "password", "sshPrivateKey", "sshPublicKey"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -35309,6 +35882,13 @@ func (ec *executionContext) unmarshalInputCreateChaosHubRequest(ctx context.Cont return it, err } it.RepoBranch = data + case "remoteHub": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("remoteHub")) + data, err := ec.unmarshalNString2string(ctx, v) + if err != nil { + return it, err + } + it.RemoteHub = data case "isPrivate": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("isPrivate")) data, err := ec.unmarshalNBoolean2bool(ctx, v) @@ -35426,7 +36006,7 @@ func (ec *executionContext) unmarshalInputCreateRemoteChaosHub(ctx context.Conte asMap[k] = v } - fieldsInOrder := [...]string{"name", "tags", "description", "repoURL"} + fieldsInOrder := [...]string{"name", "tags", "description", "repoURL", "remoteHub"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -35461,6 +36041,13 @@ func (ec *executionContext) unmarshalInputCreateRemoteChaosHub(ctx context.Conte return it, err } it.RepoURL = data + case "remoteHub": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("remoteHub")) + data, err := ec.unmarshalNString2string(ctx, v) + if err != nil { + return it, err + } + it.RemoteHub = data } } @@ -36520,6 +37107,74 @@ func (ec *executionContext) unmarshalInputKubeGVRRequest(ctx context.Context, ob return it, nil } +func (ec *executionContext) unmarshalInputKubeNamespaceData(ctx context.Context, obj interface{}) (model.KubeNamespaceData, error) { + var it model.KubeNamespaceData + asMap := map[string]interface{}{} + for k, v := range obj.(map[string]interface{}) { + asMap[k] = v + } + + fieldsInOrder := [...]string{"requestID", "infraID", "kubeNamespace"} + for _, k := range fieldsInOrder { + v, ok := asMap[k] + if !ok { + continue + } + switch k { + case "requestID": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("requestID")) + data, err := ec.unmarshalNID2string(ctx, v) + if err != nil { + return it, err + } + it.RequestID = data + case "infraID": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("infraID")) + data, err := ec.unmarshalNInfraIdentity2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐInfraIdentity(ctx, v) + if err != nil { + return it, err + } + it.InfraID = data + case "kubeNamespace": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("kubeNamespace")) + data, err := ec.unmarshalNString2string(ctx, v) + if err != nil { + return it, err + } + it.KubeNamespace = data + } + } + + return it, nil +} + +func (ec *executionContext) unmarshalInputKubeNamespaceRequest(ctx context.Context, obj interface{}) (model.KubeNamespaceRequest, error) { + var it model.KubeNamespaceRequest + asMap := map[string]interface{}{} + for k, v := range obj.(map[string]interface{}) { + asMap[k] = v + } + + fieldsInOrder := [...]string{"infraID"} + for _, k := range fieldsInOrder { + v, ok := asMap[k] + if !ok { + continue + } + switch k { + case "infraID": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("infraID")) + data, err := ec.unmarshalNID2string(ctx, v) + if err != nil { + return it, err + } + it.InfraID = data + } + } + + return it, nil +} + func (ec *executionContext) unmarshalInputKubeObjectData(ctx context.Context, obj interface{}) (model.KubeObjectData, error) { var it model.KubeObjectData asMap := map[string]interface{}{} @@ -36568,7 +37223,7 @@ func (ec *executionContext) unmarshalInputKubeObjectRequest(ctx context.Context, asMap[k] = v } - fieldsInOrder := [...]string{"infraID", "kubeObjRequest", "objectType", "workloads"} + fieldsInOrder := [...]string{"infraID", "kubeObjRequest", "namespace", "objectType", "workloads"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -36589,6 +37244,13 @@ func (ec *executionContext) unmarshalInputKubeObjectRequest(ctx context.Context, return it, err } it.KubeObjRequest = data + case "namespace": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("namespace")) + data, err := ec.unmarshalNString2string(ctx, v) + if err != nil { + return it, err + } + it.Namespace = data case "objectType": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("objectType")) data, err := ec.unmarshalNString2string(ctx, v) @@ -37822,7 +38484,7 @@ func (ec *executionContext) unmarshalInputUpdateChaosHubRequest(ctx context.Cont asMap[k] = v } - fieldsInOrder := [...]string{"id", "name", "description", "tags", "repoURL", "repoBranch", "isPrivate", "authType", "token", "userName", "password", "sshPrivateKey", "sshPublicKey"} + fieldsInOrder := [...]string{"id", "name", "description", "tags", "repoURL", "repoBranch", "remoteHub", "isPrivate", "authType", "token", "userName", "password", "sshPrivateKey", "sshPublicKey"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -37871,6 +38533,13 @@ func (ec *executionContext) unmarshalInputUpdateChaosHubRequest(ctx context.Cont return it, err } it.RepoBranch = data + case "remoteHub": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("remoteHub")) + data, err := ec.unmarshalNString2string(ctx, v) + if err != nil { + return it, err + } + it.RemoteHub = data case "isPrivate": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("isPrivate")) data, err := ec.unmarshalNBoolean2bool(ctx, v) @@ -38438,6 +39107,11 @@ func (ec *executionContext) _ChaosHub(ctx context.Context, sel ast.SelectionSet, if out.Values[i] == graphql.Null { out.Invalids++ } + case "remoteHub": + out.Values[i] = ec._ChaosHub_remoteHub(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "projectID": out.Values[i] = ec._ChaosHub_projectID(ctx, field, obj) if out.Values[i] == graphql.Null { @@ -38553,6 +39227,11 @@ func (ec *executionContext) _ChaosHubStatus(ctx context.Context, sel ast.Selecti if out.Values[i] == graphql.Null { out.Invalids++ } + case "remoteHub": + out.Values[i] = ec._ChaosHubStatus_remoteHub(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "isAvailable": out.Values[i] = ec._ChaosHubStatus_isAvailable(ctx, field, obj) if out.Values[i] == graphql.Null { @@ -40329,6 +41008,89 @@ func (ec *executionContext) _K8SProbe(ctx context.Context, sel ast.SelectionSet, return out } +var kubeNamespaceImplementors = []string{"KubeNamespace"} + +func (ec *executionContext) _KubeNamespace(ctx context.Context, sel ast.SelectionSet, obj *model.KubeNamespace) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, kubeNamespaceImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("KubeNamespace") + case "name": + out.Values[i] = ec._KubeNamespace_name(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var kubeNamespaceResponseImplementors = []string{"KubeNamespaceResponse"} + +func (ec *executionContext) _KubeNamespaceResponse(ctx context.Context, sel ast.SelectionSet, obj *model.KubeNamespaceResponse) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, kubeNamespaceResponseImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("KubeNamespaceResponse") + case "infraID": + out.Values[i] = ec._KubeNamespaceResponse_infraID(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "kubeNamespace": + out.Values[i] = ec._KubeNamespaceResponse_kubeNamespace(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + var kubeObjectImplementors = []string{"KubeObject"} func (ec *executionContext) _KubeObject(ctx context.Context, sel ast.SelectionSet, obj *model.KubeObject) graphql.Marshaler { @@ -41018,6 +41780,13 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) if out.Values[i] == graphql.Null { out.Invalids++ } + case "kubeNamespace": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_kubeNamespace(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "addChaosHub": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_addChaosHub(ctx, field) @@ -42120,7 +42889,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr case "getEnvironment": field := field - innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + innerFunc := func(ctx context.Context, _ *graphql.FieldSet) (res graphql.Marshaler) { defer func() { if r := recover(); r != nil { ec.Error(ctx, ec.Recover(ctx, r)) @@ -42139,7 +42908,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr case "listEnvironments": field := field - innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + innerFunc := func(ctx context.Context, _ *graphql.FieldSet) (res graphql.Marshaler) { defer func() { if r := recover(); r != nil { ec.Error(ctx, ec.Recover(ctx, r)) @@ -42180,7 +42949,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr case "listImageRegistry": field := field - innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + innerFunc := func(ctx context.Context, _ *graphql.FieldSet) (res graphql.Marshaler) { defer func() { if r := recover(); r != nil { ec.Error(ctx, ec.Recover(ctx, r)) @@ -42921,6 +43690,8 @@ func (ec *executionContext) _Subscription(ctx context.Context, sel ast.Selection return ec._Subscription_getPodLog(ctx, fields[0]) case "getKubeObject": return ec._Subscription_getKubeObject(ctx, fields[0]) + case "getKubeNamespace": + return ec._Subscription_getKubeNamespace(ctx, fields[0]) default: panic("unknown field " + strconv.Quote(fields[0].Name)) } @@ -44223,7 +44994,7 @@ func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.Selecti return res } -func (ec *executionContext) marshalNKubeObject2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObject(ctx context.Context, sel ast.SelectionSet, v []*model.KubeObject) graphql.Marshaler { +func (ec *executionContext) marshalNKubeNamespace2ᚕᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespace(ctx context.Context, sel ast.SelectionSet, v []*model.KubeNamespace) graphql.Marshaler { ret := make(graphql.Array, len(v)) var wg sync.WaitGroup isLen1 := len(v) == 1 @@ -44247,7 +45018,7 @@ func (ec *executionContext) marshalNKubeObject2ᚕᚖgithubᚗcomᚋlitmuschaos if !isLen1 { defer wg.Done() } - ret[i] = ec.marshalOKubeObject2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObject(ctx, sel, v[i]) + ret[i] = ec.marshalOKubeNamespace2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespace(ctx, sel, v[i]) } if isLen1 { f(i) @@ -44261,6 +45032,40 @@ func (ec *executionContext) marshalNKubeObject2ᚕᚖgithubᚗcomᚋlitmuschaos return ret } +func (ec *executionContext) unmarshalNKubeNamespaceData2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceData(ctx context.Context, v interface{}) (model.KubeNamespaceData, error) { + res, err := ec.unmarshalInputKubeNamespaceData(ctx, v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) unmarshalNKubeNamespaceRequest2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceRequest(ctx context.Context, v interface{}) (model.KubeNamespaceRequest, error) { + res, err := ec.unmarshalInputKubeNamespaceRequest(ctx, v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNKubeNamespaceResponse2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceResponse(ctx context.Context, sel ast.SelectionSet, v model.KubeNamespaceResponse) graphql.Marshaler { + return ec._KubeNamespaceResponse(ctx, sel, &v) +} + +func (ec *executionContext) marshalNKubeNamespaceResponse2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespaceResponse(ctx context.Context, sel ast.SelectionSet, v *model.KubeNamespaceResponse) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._KubeNamespaceResponse(ctx, sel, v) +} + +func (ec *executionContext) marshalNKubeObject2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObject(ctx context.Context, sel ast.SelectionSet, v *model.KubeObject) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._KubeObject(ctx, sel, v) +} + func (ec *executionContext) unmarshalNKubeObjectData2githubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObjectData(ctx context.Context, v interface{}) (model.KubeObjectData, error) { res, err := ec.unmarshalInputKubeObjectData(ctx, v) return res, graphql.ErrorOnPath(ctx, err) @@ -45812,11 +46617,11 @@ func (ec *executionContext) unmarshalOKubeGVRRequest2ᚖgithubᚗcomᚋlitmuscha return &res, graphql.ErrorOnPath(ctx, err) } -func (ec *executionContext) marshalOKubeObject2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeObject(ctx context.Context, sel ast.SelectionSet, v *model.KubeObject) graphql.Marshaler { +func (ec *executionContext) marshalOKubeNamespace2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubeNamespace(ctx context.Context, sel ast.SelectionSet, v *model.KubeNamespace) graphql.Marshaler { if v == nil { return graphql.Null } - return ec._KubeObject(ctx, sel, v) + return ec._KubeNamespace(ctx, sel, v) } func (ec *executionContext) marshalOKubernetesCMDProbe2ᚖgithubᚗcomᚋlitmuschaosᚋlitmusᚋchaoscenterᚋgraphqlᚋserverᚋgraphᚋmodelᚐKubernetesCMDProbe(ctx context.Context, sel ast.SelectionSet, v *model.KubernetesCMDProbe) graphql.Marshaler { diff --git a/chaoscenter/graphql/server/graph/gitops.resolvers.go b/chaoscenter/graphql/server/graph/gitops.resolvers.go index b6f1b19547f..d068e5ed7ef 100644 --- a/chaoscenter/graphql/server/graph/gitops.resolvers.go +++ b/chaoscenter/graphql/server/graph/gitops.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" diff --git a/chaoscenter/graphql/server/graph/image_registry.resolvers.go b/chaoscenter/graphql/server/graph/image_registry.resolvers.go index aa85df1385b..2bc58bebadf 100644 --- a/chaoscenter/graphql/server/graph/image_registry.resolvers.go +++ b/chaoscenter/graphql/server/graph/image_registry.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" diff --git a/chaoscenter/graphql/server/graph/model/models_gen.go b/chaoscenter/graphql/server/graph/model/models_gen.go index b4173ea00b2..9734945dfb1 100644 --- a/chaoscenter/graphql/server/graph/model/models_gen.go +++ b/chaoscenter/graphql/server/graph/model/models_gen.go @@ -138,6 +138,8 @@ type ChaosHub struct { RepoURL string `json:"repoURL"` // Branch of the git repository RepoBranch string `json:"repoBranch"` + // Connected Hub of remote repository + RemoteHub string `json:"remoteHub"` // ID of the project in which the chaos hub is present ProjectID string `json:"projectID"` // Default Hub Identifier @@ -213,6 +215,8 @@ type ChaosHubStatus struct { RepoURL string `json:"repoURL"` // Branch of the git repository RepoBranch string `json:"repoBranch"` + // Connected Hub of remote repository + RemoteHub string `json:"remoteHub"` // Bool value indicating whether the hub is available or not. IsAvailable bool `json:"isAvailable"` // Total number of experiments in the hub @@ -292,6 +296,8 @@ type CloningInput struct { RepoBranch string `json:"repoBranch"` // URL of the git repository RepoURL string `json:"repoURL"` + // Connected Hub of remote repository + RemoteHub string `json:"remoteHub"` // Bool value indicating whether the hub is private or not. IsPrivate bool `json:"isPrivate"` // Type of authentication used: BASIC, SSH, TOKEN @@ -344,6 +350,8 @@ type CreateChaosHubRequest struct { RepoURL string `json:"repoURL"` // Branch of the git repository RepoBranch string `json:"repoBranch"` + // Connected Hub of remote repository + RemoteHub string `json:"remoteHub"` // Bool value indicating whether the hub is private or not. IsPrivate bool `json:"isPrivate"` // Type of authentication used: BASIC, SSH, TOKEN @@ -377,6 +385,8 @@ type CreateRemoteChaosHub struct { Description *string `json:"description,omitempty"` // URL of the git repository RepoURL string `json:"repoURL"` + // Connected Hub of remote repository + RemoteHub string `json:"remoteHub"` } // Defines the start date and end date for the filtering the data @@ -1149,7 +1159,37 @@ type KubeGVRRequest struct { Resource string `json:"resource"` } -// KubeObject consists of the namespace and the available resources in the same +// Define name in the infra (not really useful at the moment but maybe we will need other field later) +type KubeNamespace struct { + // Name of the namespace + Name string `json:"name"` +} + +// Defines the details of Kubernetes namespace +type KubeNamespaceData struct { + // Unique request ID for fetching Kubernetes namespace details + RequestID string `json:"requestID"` + // ID of the infra in which the Kubernetes namespace is present + InfraID *InfraIdentity `json:"infraID"` + // List of KubeNamespace return by subscriber + KubeNamespace string `json:"kubeNamespace"` +} + +// Defines details for fetching Kubernetes namespace data +type KubeNamespaceRequest struct { + // ID of the infra + InfraID string `json:"infraID"` +} + +// Response received for querying Kubernetes Namespaces +type KubeNamespaceResponse struct { + // ID of the infra in which the Kubernetes namespace is present + InfraID string `json:"infraID"` + // List of the Kubernetes namespace + KubeNamespace []*KubeNamespace `json:"kubeNamespace"` +} + +// KubeObject consists of the available resources in a namespace type KubeObject struct { // Namespace of the resource Namespace string `json:"namespace"` @@ -1173,8 +1213,10 @@ type KubeObjectRequest struct { InfraID string `json:"infraID"` // GVR Request KubeObjRequest *KubeGVRRequest `json:"kubeObjRequest,omitempty"` - ObjectType string `json:"objectType"` - Workloads []*Workload `json:"workloads,omitempty"` + // Namespace in which the Kubernetes object is present + Namespace string `json:"namespace"` + ObjectType string `json:"objectType"` + Workloads []*Workload `json:"workloads,omitempty"` } // Response received for querying Kubernetes Object @@ -1182,7 +1224,7 @@ type KubeObjectResponse struct { // ID of the infra in which the Kubernetes object is present InfraID string `json:"infraID"` // Type of the Kubernetes object - KubeObj []*KubeObject `json:"kubeObj"` + KubeObj *KubeObject `json:"kubeObj"` } // Defines the CMD probe properties @@ -1945,6 +1987,8 @@ type UpdateChaosHubRequest struct { RepoURL string `json:"repoURL"` // Branch of the git repository RepoBranch string `json:"repoBranch"` + // Connected Hub of remote repository + RemoteHub string `json:"remoteHub"` // Bool value indicating whether the hub is private or not. IsPrivate bool `json:"isPrivate"` // Type of authentication used: BASIC, SSH, TOKEN diff --git a/chaoscenter/graphql/server/graph/probe.resolvers.go b/chaoscenter/graphql/server/graph/probe.resolvers.go index 71b7291e024..46636fb2834 100644 --- a/chaoscenter/graphql/server/graph/probe.resolvers.go +++ b/chaoscenter/graphql/server/graph/probe.resolvers.go @@ -2,7 +2,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.42 +// Code generated by github.com/99designs/gqlgen version v0.17.49 import ( "context" 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 c2ff92baa35..6c18a5f941b 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, } } @@ -589,9 +592,20 @@ func (c *ChaosExperimentHandler) ListExperiment(projectID string, request model. // Filtering based on date range (workflow's last updated time) if request.Filter.DateRange != nil { - endDate := strconv.FormatInt(time.Now().UnixMilli(), 10) + endDate := time.Now().UnixMilli() if request.Filter.DateRange.EndDate != nil { - endDate = *request.Filter.DateRange.EndDate + parsedEndDate, err := strconv.ParseInt(*request.Filter.DateRange.EndDate, 10, 64) + if err != nil { + return nil, errors.New("unable to parse end date") + } + + endDate = parsedEndDate + } + + // Note: StartDate cannot be passed in blank, must be "0" + startDate, err := strconv.ParseInt(request.Filter.DateRange.StartDate, 10, 64) + if err != nil { + return nil, errors.New("unable to parse start date") } filterWfDateStage := bson.D{ @@ -599,7 +613,7 @@ func (c *ChaosExperimentHandler) ListExperiment(projectID string, request model. "$match", bson.D{{"updated_at", bson.D{ {"$lte", endDate}, - {"$gte", request.Filter.DateRange.StartDate}, + {"$gte", startDate}, }}}, }, } @@ -1234,7 +1248,33 @@ func (c *ChaosExperimentHandler) GetKubeObjData(reqID string, kubeObject model.K } else if reqChan, ok := r.KubeObjectData[reqID]; ok { resp := model.KubeObjectResponse{ InfraID: kubeObject.InfraID, - KubeObj: []*model.KubeObject{}, + KubeObj: &model.KubeObject{}, + } + reqChan <- &resp + close(reqChan) + } +} + +func (c *ChaosExperimentHandler) GetKubeNamespaceData(reqID string, kubeNamespace model.KubeNamespaceRequest, r store.StateData) { + reqType := "namespace" + data, err := json.Marshal(kubeNamespace) + if err != nil { + logrus.Print("ERROR WHILE MARSHALLING POD DETAILS") + } + externalData := string(data) + payload := model.InfraActionResponse{ + Action: &model.ActionPayload{ + RequestID: reqID, + RequestType: reqType, + ExternalData: &externalData, + }, + } + if clusterChan, ok := r.ConnectedInfra[kubeNamespace.InfraID]; ok { + clusterChan <- &payload + } else if reqChan, ok := r.KubeNamespaceData[reqID]; ok { + resp := model.KubeNamespaceResponse{ + InfraID: kubeNamespace.InfraID, + KubeNamespace: []*model.KubeNamespace{}, } reqChan <- &resp close(reqChan) @@ -1321,7 +1361,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 } @@ -1430,7 +1470,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) } @@ -1487,7 +1527,7 @@ func (c *ChaosExperimentHandler) StopExperimentRuns(ctx context.Context, project if len(experimentRunsID) == 0 && experiment.CronSyntax == "" { return false, fmt.Errorf("no running or timeout experiments found") } - } else if experimentRunID != nil && *experimentRunID != "" { + } else if *experimentRunID != "" { experimentRunsID = []string{*experimentRunID} } 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/fuzz_tests/service_fuzz_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment_run/fuzz_tests/service_fuzz_test.go new file mode 100644 index 00000000000..31ff3b9aa5f --- /dev/null +++ b/chaoscenter/graphql/server/pkg/chaos_experiment_run/fuzz_tests/service_fuzz_test.go @@ -0,0 +1,111 @@ +package fuzz_tests + +import ( + "context" + "testing" + + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment_run" + dbChaosExperiment "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment" + dbChaosExperimentRun "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment_run" + dbChaosInfra "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_infrastructure" + dbMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/mocks" + + fuzz "github.com/AdaLogics/go-fuzz-headers" + store "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/data-store" + "github.com/stretchr/testify/mock" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" +) + +type MockServices struct { + ChaosExperimentOperator *dbChaosExperiment.Operator + ChaosExperimentRunOperator *dbChaosExperimentRun.Operator + ChaosInfrastructureOperator *dbChaosInfra.Operator + MongodbOperator *dbMocks.MongoOperator + ChaosExperimentRunService chaos_experiment_run.Service +} + +func NewMockServices() *MockServices { + var ( + mongodbMockOperator = new(dbMocks.MongoOperator) + chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) + chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) + chaosInfrastructureOperator = dbChaosInfra.NewInfrastructureOperator(mongodbMockOperator) + chaosExperimentRunService chaos_experiment_run.Service = chaos_experiment_run.NewChaosExperimentRunService( + chaosExperimentOperator, + chaosInfrastructureOperator, + chaosExperimentRunOperator, + ) + ) + return &MockServices{ + ChaosExperimentOperator: chaosExperimentOperator, + ChaosExperimentRunOperator: chaosExperimentRunOperator, + ChaosInfrastructureOperator: chaosInfrastructureOperator, + MongodbOperator: mongodbMockOperator, + ChaosExperimentRunService: chaosExperimentRunService, + } +} + +func FuzzProcessExperimentRunStop(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + Query bson.D + ExperimentRunID *string + Experiment dbChaosExperiment.ChaosExperimentRequest + Username string + ProjectID string + StoreStateData *store.StateData + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockServices.MongodbOperator.On("Update", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{}, nil).Once() + err = mockServices.ChaosExperimentRunService.ProcessExperimentRunStop( + context.Background(), + targetStruct.Query, + targetStruct.ExperimentRunID, + targetStruct.Experiment, + targetStruct.Username, + targetStruct.ProjectID, + targetStruct.StoreStateData, + ) + if err != nil { + t.Errorf("ProcessExperimentRunStop() error = %v", err) + } + }) +} + +func FuzzProcessCompletedExperimentRun(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + ExecData chaos_experiment_run.ExecutionData + WfID string + RunID string + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + findResult := []interface{}{bson.D{ + {Key: "experiment_id", Value: targetStruct.WfID}, + }} + mockServices := NewMockServices() + singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil) + mockServices.MongodbOperator.On("Get", mock.Anything, mock.Anything, mock.Anything).Return(singleResult, nil).Once() + + _, err = mockServices.ChaosExperimentRunService.ProcessCompletedExperimentRun( + targetStruct.ExecData, + targetStruct.WfID, + targetStruct.RunID, + ) + if err != nil { + t.Errorf("ProcessCompletedExperimentRun() error = %v", err) + } + }) +} 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 new file mode 100644 index 00000000000..c806c538a01 --- /dev/null +++ b/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/fuzz_tests/handler_fuzz_test.go @@ -0,0 +1,248 @@ +package fuzz_tests + +import ( + "context" + "strings" + "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" + dbChaosExperimentRun "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment_run" + dbMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/mocks" + dbGitOpsMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/gitops/model/mocks" + + fuzz "github.com/AdaLogics/go-fuzz-headers" + + "github.com/google/uuid" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" + typesMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment_run/model/mocks" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb" + "github.com/stretchr/testify/mock" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" +) + +type MockServices struct { + ChaosExperimentRunService *typesMocks.ChaosExperimentRunService + InfrastructureService *chaosInfraMocks.InfraService + GitOpsService *dbGitOpsMocks.GitOpsService + ChaosExperimentOperator *dbChaosExperiment.Operator + ChaosExperimentRunOperator *dbChaosExperimentRun.Operator + MongodbOperator *dbMocks.MongoOperator + ChaosExperimentRunHandler *handler.ChaosExperimentRunHandler + ProbeService *dbProbeMocks.ProbeService +} + +func NewMockServices() *MockServices { + var ( + mongodbMockOperator = new(dbMocks.MongoOperator) + infrastructureService = new(chaosInfraMocks.InfraService) + gitOpsService = new(dbGitOpsMocks.GitOpsService) + chaosExperimentRunService = new(typesMocks.ChaosExperimentRunService) + chaosExperimentOperator = dbChaosExperiment.NewChaosExperimentOperator(mongodbMockOperator) + chaosExperimentRunOperator = dbChaosExperimentRun.NewChaosExperimentRunOperator(mongodbMockOperator) + probeService = new(dbProbeMocks.ProbeService) + ) + var chaosExperimentRunHandler = handler.NewChaosExperimentRunHandler( + chaosExperimentRunService, + infrastructureService, + gitOpsService, + chaosExperimentOperator, + chaosExperimentRunOperator, + probeService, + mongodbMockOperator, + ) + return &MockServices{ + ChaosExperimentRunService: chaosExperimentRunService, + InfrastructureService: infrastructureService, + GitOpsService: gitOpsService, + ChaosExperimentOperator: chaosExperimentOperator, + ChaosExperimentRunOperator: chaosExperimentRunOperator, + MongodbOperator: mongodbMockOperator, + ProbeService: probeService, + ChaosExperimentRunHandler: chaosExperimentRunHandler, + } +} + +func FuzzGetExperimentRun(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + ProjectID string + ExperimentRunID string + NotifyID string + }{} + + targetStruct.ProjectID = uuid.New().String() + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + ctx := context.Background() + mockServices := NewMockServices() + findResult := []interface{}{bson.D{ + {Key: "experiment_run_id", Value: targetStruct.ExperimentRunID}, + {Key: "project_id", Value: targetStruct.ProjectID}, + {Key: "infra_id", Value: "mockInfraID"}, + {Key: "kubernetesInfraDetails", Value: bson.A{ + bson.D{ + {Key: "InfraID", Value: "mockInfraID"}, + {Key: "Name", Value: "MockInfra"}, + {Key: "EnvironmentID", Value: "mockEnvID"}, + {Key: "Description", Value: "Mock Infrastructure"}, + {Key: "PlatformName", Value: "Kubernetes"}, + {Key: "IsActive", Value: true}, + {Key: "UpdatedAt", Value: time.Now().Unix()}, + {Key: "CreatedAt", Value: time.Now().Unix()}, + }, + }}, + {Key: "experiment", Value: bson.A{ + bson.D{ + {Key: "ExperimentName", Value: "MockExperiment"}, + {Key: "ExperimentType", Value: "MockType"}, + {Key: "Revision", Value: bson.A{ + bson.D{ + {Key: "RevisionID", Value: uuid.NewString()}, + {Key: "ExperimentManifest", Value: "mockManifest"}, + {Key: "Weightages", Value: bson.A{ + bson.D{{Key: "FaultName", Value: "fault1"}, {Key: "Weightage", Value: 10}}, + bson.D{{Key: "FaultName", Value: "fault2"}, {Key: "Weightage", Value: 20}}, + }}, + }, + }}, + }, + }}, + }} + + cursor, _ := mongo.NewCursorFromDocuments(findResult, nil, nil) + mockServices.MongodbOperator.On("Aggregate", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(cursor, nil).Once() + + res, err := mockServices.ChaosExperimentRunHandler.GetExperimentRun(ctx, targetStruct.ProjectID, &targetStruct.ExperimentRunID, &targetStruct.NotifyID) + if err != nil { + t.Errorf("ChaosExperimentRunHandler.GetExperimentRun() error = %v", err) + return + } + if res == nil { + t.Errorf("Returned response is nil") + } + }) +} + +func FuzzListExperimentRun(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + ProjectID string + Request model.ListExperimentRunRequest + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + findResult := []interface{}{bson.D{ + {Key: "project_id", Value: targetStruct.ProjectID}, + {Key: "infra_id", Value: "abc"}, + { + Key: "revision", Value: []dbChaosExperiment.ExperimentRevision{ + { + RevisionID: uuid.NewString(), + }, + }, + }, + }} + cursor, _ := mongo.NewCursorFromDocuments(findResult, nil, nil) + mockServices.MongodbOperator.On("Aggregate", mock.Anything, mongodb.ChaosExperimentRunsCollection, mock.Anything, mock.Anything).Return(cursor, nil).Once() + + res, err := mockServices.ChaosExperimentRunHandler.ListExperimentRun(targetStruct.ProjectID, targetStruct.Request) + if err != nil { + t.Errorf("ListExperimentRun() error = %v", err) + return + } + if res == nil { + t.Errorf("Returned response is nil") + } + + }) +} + +func FuzzRunChaosWorkFlow(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + ProjectID string + Workflow dbChaosExperiment.ChaosExperimentRequest + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockServices.MongodbOperator.On("StartSession").Return(mock.Anything, nil).Once() + mockServices.MongodbOperator.On("Update", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{}, nil).Once() + mockServices.MongodbOperator.On("CommitTransaction", mock.Anything).Return(nil).Once() + mockServices.MongodbOperator.On("AbortTransaction", mock.Anything).Return(nil).Once() + + findResult := []interface{}{bson.D{ + {Key: "infra_id", Value: targetStruct.ProjectID}, + }} + singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil) + mockServices.MongodbOperator.On("Get", mock.Anything, mock.Anything, mock.Anything).Return(singleResult, nil).Once() + + res, err := mockServices.ChaosExperimentRunHandler.RunChaosWorkFlow(context.Background(), targetStruct.ProjectID, targetStruct.Workflow, nil) + if strings.Contains(err.Error(), "inactive infra") { + t.Log("Handled expected error due to inactive infrastructure: ", err) + return + } + if res == nil { + t.Errorf("Returned response is nil") + } + }) +} + +func FuzzGetExperimentRunStats(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + ProjectID string + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + targetStruct.ProjectID = uuid.New().String() + + mockServices := NewMockServices() + + findResult := []interface{}{bson.D{ + {Key: "project_id", Value: targetStruct.ProjectID}, + {Key: "infra_id", Value: "abc"}, + { + Key: "revision", Value: []dbChaosExperiment.ExperimentRevision{ + { + RevisionID: uuid.NewString(), + }, + }, + }, + }} + cursor, _ := mongo.NewCursorFromDocuments(findResult, nil, nil) + mockServices.MongodbOperator.On("Aggregate", mock.Anything, mongodb.ChaosExperimentRunsCollection, mock.Anything, mock.Anything).Return(cursor, nil).Once() + + res, err := mockServices.ChaosExperimentRunHandler.GetExperimentRunStats(context.Background(), targetStruct.ProjectID) + if err != nil { + t.Errorf("GetExperimentRunStats() error = %v", err) + return + } + if res == nil { + t.Errorf("Returned response is nil") + } + }) +} 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 eddb54e4fb3..cca64b1189c 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, } } @@ -415,16 +419,28 @@ func (c *ChaosExperimentRunHandler) ListExperimentRun(projectID string, request // Filtering based on date range if request.Filter.DateRange != nil { - endDate := strconv.FormatInt(time.Now().UnixMilli(), 10) + endDate := time.Now().UnixMilli() if request.Filter.DateRange.EndDate != nil { - endDate = *request.Filter.DateRange.EndDate + parsedEndDate, err := strconv.ParseInt(*request.Filter.DateRange.EndDate, 10, 64) + if err != nil { + return nil, errors.New("unable to parse end date") + } + + endDate = parsedEndDate } + + // Note: StartDate cannot be passed in blank, must be "0" + startDate, err := strconv.ParseInt(request.Filter.DateRange.StartDate, 10, 64) + if err != nil { + return nil, errors.New("unable to parse start date") + } + filterWfRunDateStage := bson.D{ { "$match", bson.D{{"updated_at", bson.D{ {"$lte", endDate}, - {"$gte", request.Filter.DateRange.StartDate}, + {"$gte", startDate}, }}}, }, } @@ -911,7 +927,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 +960,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") } @@ -1222,7 +1238,7 @@ func (c *ChaosExperimentRunHandler) ChaosExperimentRunEvent(event model.Experime err = c.chaosExperimentOperator.UpdateChaosExperiment(sessionContext, filter, update) if err != nil { - logrus.Error("Failed to update experiment collection") + logrus.WithError(err).Error("Failed to update experiment collection") return err } } else if experimentRunCount > 0 { @@ -1257,7 +1273,7 @@ func (c *ChaosExperimentRunHandler) ChaosExperimentRunEvent(event model.Experime err = c.chaosExperimentOperator.UpdateChaosExperiment(sessionContext, filter, update) if err != nil { - logrus.Error("Failed to update experiment collection") + logrus.WithError(err).Error("Failed to update experiment collection") return err } } 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 new file mode 100644 index 00000000000..4fc9881b3d4 --- /dev/null +++ b/chaoscenter/graphql/server/pkg/chaos_infrastructure/fuzz/fuzz_test.go @@ -0,0 +1,659 @@ +package test + +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" + chaosExperimentRunMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/chaos_experiment_run/model/mocks" + 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" + dbChaosExperimentRun "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_experiment_run" + dbMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/mocks" + dbGitOpsMocks "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/gitops/model/mocks" + "go.mongodb.org/mongo-driver/bson" + + dbChaosInfra "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/chaos_infrastructure" + dbOperationsEnvironment "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb/environments" + + fuzz "github.com/AdaLogics/go-fuzz-headers" + store "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/data-store" +) + +type MockServices struct { + ChaosExperimentService *chaosExperimentMocks.ChaosExperimentService + ChaosExperimentRunService *chaosExperimentRunMocks.ChaosExperimentRunService + InfrastructureService *chaosInfraMocks.InfraService + GitOpsService *dbGitOpsMocks.GitOpsService + ChaosExperimentOperator *dbChaosExperiment.Operator + ChaosExperimentRunOperator *dbChaosExperimentRun.Operator + MongodbOperator *dbMocks.MongoOperator + ChaosExperimentHandler *handler.ChaosExperimentHandler +} + +func NewMockServices() *MockServices { + var ( + mongodbMockOperator = new(dbMocks.MongoOperator) + infrastructureService = new(chaosInfraMocks.InfraService) + chaosExperimentRunService = new(chaosExperimentRunMocks.ChaosExperimentRunService) + 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, probeService, mongodbMockOperator) + return &MockServices{ + ChaosExperimentService: chaosExperimentService, + ChaosExperimentRunService: chaosExperimentRunService, + InfrastructureService: infrastructureService, + GitOpsService: gitOpsService, + ChaosExperimentOperator: chaosExperimentOperator, + ChaosExperimentRunOperator: chaosExperimentRunOperator, + MongodbOperator: mongodbMockOperator, + ChaosExperimentHandler: chaosExperimentHandler, + } +} + +var ( + mongodbMockOperator = new(dbMocks.MongoOperator) + environmentOperator = dbOperationsEnvironment.NewEnvironmentOperator(mongodbMockOperator) +) + +func stringPointer(v string) *string { return &v } + +func FuzzRegisterInfra(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + projectID string + request model.RegisterInfraRequest + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + ctx := context.Background() + mockServices := NewMockServices() + mockResponse := &model.RegisterInfraResponse{ + Token: "test-token", + InfraID: "test-infra-id", + Name: targetStruct.request.Name, + Manifest: "test-manifest", + } + mockServices.InfrastructureService. + On("RegisterInfra", ctx, targetStruct.projectID, targetStruct.request). + Return(mockResponse, nil) + + response, err := mockServices.InfrastructureService.RegisterInfra(ctx, targetStruct.projectID, targetStruct.request) + if response.Name != targetStruct.request.Name { + t.Errorf("Chaos Infrastructure Name is %s Return %s", response.Name, targetStruct.request.Name) + } + if err != nil { + t.Errorf("ChaosInfrastructure.RegisterInfra() error = %v", err) + return + } + if response == nil { + t.Errorf("Returned environment is nil") + } + }) + +} + +func FuzzDeleteInfra(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + projectID string + infraID string + r store.StateData + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + ctx := context.Background() + mockServices := NewMockServices() + + mockServices.InfrastructureService. + On("DeleteInfra", ctx, targetStruct.projectID, targetStruct.infraID, targetStruct.r). + Return("infra deleted successfully", nil) + + response, err := mockServices.InfrastructureService.DeleteInfra(ctx, targetStruct.projectID, targetStruct.infraID, targetStruct.r) + if err != nil { + t.Errorf("ChaosInfrastructure.RegisterInfra() error = %v", err) + return + } + if response == "" { + t.Errorf("Returned environment is nil") + } + + }) +} + +func FuzzGetInfraTest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + projectID string + infraID string + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + ctx := context.Background() + mockServices := NewMockServices() + + mockResponse := &model.Infra{ + InfraID: targetStruct.infraID, + ProjectID: targetStruct.projectID, + Name: "TestInfraName", + Description: nil, + Tags: []string{"tag1", "tag2"}, + EnvironmentID: "test-env-id", + PlatformName: "test-platform", + IsActive: true, + IsInfraConfirmed: true, + IsRemoved: false, + UpdatedAt: "1680000000", + CreatedAt: "1670000000", + Token: "test-token", + InfraNamespace: nil, + ServiceAccount: nil, + InfraScope: "test-scope", + StartTime: "1675000000", + Version: "1.0.0", + CreatedBy: &model.UserDetails{Username: "test-user"}, + UpdatedBy: &model.UserDetails{Username: "test-user"}, + NoOfExperiments: nil, + NoOfExperimentRuns: nil, + LastExperimentTimestamp: nil, + UpdateStatus: "UpToDate", + } + + mockServices.InfrastructureService. + On("GetInfra", context.Background(), targetStruct.projectID, targetStruct.infraID). + Return(mockResponse, nil) + + infra, err := mockServices.InfrastructureService.GetInfra(ctx, targetStruct.projectID, targetStruct.infraID) + if err != nil { + t.Errorf("ChaosInfrastructure.GetInfra() error = %v", err) + return + } + if infra.InfraID != targetStruct.infraID { + t.Errorf("ProjectID mismatch: got %v, want %v", infra.InfraID, targetStruct.infraID) + } + }) +} + +func FuzzListInfras(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + projectID string + request *model.ListInfraRequest + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + + mockResponse := &model.ListInfraResponse{ + TotalNoOfInfras: 10, + Infras: []*model.Infra{ + { + InfraID: "infra1", + ProjectID: targetStruct.projectID, + Name: "Test Infra", + EnvironmentID: "env1", + Description: stringPointer("Test description"), + PlatformName: "Test Platform", + IsActive: true, + IsInfraConfirmed: true, + UpdatedAt: "1622527200", + CreatedAt: "1622523600", + Token: "test-token", + InfraNamespace: stringPointer("test-namespace"), + ServiceAccount: stringPointer("test-service-account"), + InfraScope: "test-scope", + StartTime: "1622520000", + Version: "v1.0", + Tags: []string{"tag1", "tag2"}, + IsRemoved: false, + }, + }, + } + + mockServices.InfrastructureService.On("ListInfras", targetStruct.projectID, targetStruct.request). + Return(mockResponse, nil) + + response, err := mockServices.InfrastructureService.ListInfras(targetStruct.projectID, targetStruct.request) + if err != nil { + t.Errorf("ChaosInfrastructure.DeleteInfra() error = %v", err) + return + } + + if response.TotalNoOfInfras < 0 { + t.Errorf("Invalid TotalNoOfInfras: %d", response.TotalNoOfInfras) + } + for _, infra := range response.Infras { + if infra.InfraID == "" { + t.Errorf("InfraID should not be empty") + } + if infra.ProjectID != targetStruct.projectID { + t.Errorf("ProjectID mismatch: got %v, want %v", infra.ProjectID, targetStruct.projectID) + } + } + + }) +} + +func FuzzGetInfraDetails(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + InfraID string + projectID string + request *model.ListInfraRequest + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockResponse := &model.Infra{ + InfraID: targetStruct.InfraID, + ProjectID: targetStruct.projectID, + Name: "TestInfraName", + Description: nil, + Tags: []string{"tag1", "tag2"}, + EnvironmentID: "test-env-id", + PlatformName: "test-platform", + IsActive: true, + IsInfraConfirmed: true, + IsRemoved: false, + UpdatedAt: "1680000000", + CreatedAt: "1670000000", + Token: "test-token", + InfraNamespace: nil, + ServiceAccount: nil, + InfraScope: "test-scope", + StartTime: "1675000000", + Version: "1.0.0", + CreatedBy: &model.UserDetails{Username: "test-user"}, + UpdatedBy: &model.UserDetails{Username: "test-user"}, + NoOfExperiments: nil, + NoOfExperimentRuns: nil, + LastExperimentTimestamp: nil, + UpdateStatus: "UpToDate", + } + + mockServices.InfrastructureService. + On("GetInfra", context.Background(), targetStruct.projectID, targetStruct.InfraID). + Return(mockResponse, nil) + + mockServices.InfrastructureService. + On("GetInfraDetails", context.Background(), targetStruct.InfraID, targetStruct.projectID). + Return(mockResponse, nil) + + ctx := context.Background() + response, err := mockServices.InfrastructureService.GetInfraDetails(ctx, targetStruct.InfraID, targetStruct.projectID) + if err != nil { + t.Errorf("ChaosInfrastructure.DeleteInfra() error = %v", err) + return + } + if response.InfraID != targetStruct.InfraID { + t.Errorf("InfraID mismatch: got %v, want %v", response.InfraID, targetStruct.InfraID) + } + + }) +} + +func FuzzGetInfraStats(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + projectID string + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockResponse := &model.GetInfraStatsResponse{ + TotalInfrastructures: 10, + TotalActiveInfrastructure: 7, + TotalInactiveInfrastructures: 3, + TotalConfirmedInfrastructure: 8, + TotalNonConfirmedInfrastructures: 2, + } + + mockServices.InfrastructureService. + On("GetInfraStats", context.Background(), targetStruct.projectID). + Return(mockResponse, nil) + + ctx := context.Background() + response, err := mockServices.InfrastructureService.GetInfraStats(ctx, targetStruct.projectID) + if err != nil { + t.Errorf("ChaosInfrastructure.DeleteInfra() error = %v", err) + return + } + if response.TotalInfrastructures != mockResponse.TotalInfrastructures { + t.Errorf("TotalInfrastructures mismatch: got %v, want %v", response.TotalInfrastructures, mockResponse.TotalInfrastructures) + } + if response.TotalActiveInfrastructure != mockResponse.TotalActiveInfrastructure { + t.Errorf("TotalActiveInfrastructure mismatch: got %v, want %v", response.TotalActiveInfrastructure, mockResponse.TotalActiveInfrastructure) + } + if response.TotalInactiveInfrastructures != mockResponse.TotalInactiveInfrastructures { + t.Errorf("TotalInactiveInfrastructures mismatch: got %v, want %v", response.TotalInactiveInfrastructures, mockResponse.TotalInactiveInfrastructures) + } + if response.TotalConfirmedInfrastructure != mockResponse.TotalConfirmedInfrastructure { + t.Errorf("TotalConfirmedInfrastructure mismatch: got %v, want %v", response.TotalConfirmedInfrastructure, mockResponse.TotalConfirmedInfrastructure) + } + if response.TotalNonConfirmedInfrastructures != mockResponse.TotalNonConfirmedInfrastructures { + t.Errorf("TotalNonConfirmedInfrastructures mismatch: got %v, want %v", response.TotalNonConfirmedInfrastructures, mockResponse.TotalNonConfirmedInfrastructures) + } + + }) +} + +func FuzzGetVersionDetails(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + mockServices := NewMockServices() + mockResponse := &model.InfraVersionDetails{ + LatestVersion: "testVersion1", + CompatibleVersions: []string{"compatibleVersion1", "compatibleVersion2"}, + } + + mockServices.InfrastructureService.On("GetVersionDetails").Return(mockResponse, nil) + response, err := mockServices.InfrastructureService.GetVersionDetails() + + if err != nil { + t.Errorf("infraService.GetVersionDetails() error = %v", err) + return + } + + if response == nil { + t.Errorf("Expected a non-nil response") + return + } + if response.LatestVersion == "" { + t.Errorf("Expected a valid latest version") + } + + }) +} + +func FuzzQueryServerVersion(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + ctx := context.Background() + mockResponse := &model.ServerVersionResponse{ + Key: "version", + Value: string(data), + } + + mockServices := NewMockServices() + mockServices.InfrastructureService.On("GetConfig", ctx, "version").Return(mockResponse, nil) + mockServices.InfrastructureService.On("QueryServerVersion", ctx).Return(mockResponse, nil) + response, err := mockServices.InfrastructureService.QueryServerVersion(ctx) + if err != nil { + t.Errorf("QueryServerVersion() error = %v", err) + return + } + if response == nil { + t.Errorf("Expected a non-nil response") + return + } + if response.Key != "version" { + t.Errorf("Expected Key to be 'version', got %s", response.Key) + } + if response.Value != string(data) { + t.Errorf("Expected Value to be %s, got %s", string(data), response.Value) + } + }) +} + +func FuzzPodLog(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + request model.PodLog + r store.StateData + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockServices.InfrastructureService. + On("PodLog", targetStruct.request, targetStruct.r). + Return("LOGS SENT SUCCESSFULLY", nil) + response, err := mockServices.InfrastructureService.PodLog(targetStruct.request, targetStruct.r) + if err != nil { + t.Errorf("ChaosInfrastructure.PodLog() error = %v", err) + return + } + if response == "" { + t.Errorf("Returned environment is nil") + } + + }) +} + +func FuzzKubeObj(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + request model.KubeObjectData + r store.StateData + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockServices.InfrastructureService. + On("KubeObj", targetStruct.request, targetStruct.r). + Return("KubeData sent successfully", nil) + + response, err := mockServices.InfrastructureService.KubeObj(targetStruct.request, targetStruct.r) + if err != nil { + t.Errorf("ChaosInfrastructure.KubeObj() error = %v", err) + return + } + if response == "" { + t.Errorf("Returned environment is nil") + } + }) +} + +func FuzzSendInfraEvent(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + EventType string + EventName string + Description string + Infra model.Infra + R store.StateData + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + targetStruct.R.InfraEventPublish = make(map[string][]chan *model.InfraEventResponse) + projectID := targetStruct.Infra.ProjectID + if projectID != "" { + targetStruct.R.InfraEventPublish[projectID] = append(targetStruct.R.InfraEventPublish[projectID], make(chan *model.InfraEventResponse, 1)) + } + + mockServices.InfrastructureService.SendInfraEvent(targetStruct.EventType, targetStruct.EventName, targetStruct.Description, targetStruct.Infra, targetStruct.R) + + if projectID != "" { + select { + case event := <-targetStruct.R.InfraEventPublish[projectID][0]: + if event == nil { + t.Errorf("Expected non-nil event") + } + if event.EventType != targetStruct.EventType { + t.Errorf("Expected EventType to be %s, got %s", targetStruct.EventType, event.EventType) + } + if event.EventName != targetStruct.EventName { + t.Errorf("Expected EventName to be %s, got %s", targetStruct.EventName, event.EventName) + } + if event.Description != targetStruct.Description { + t.Errorf("Expected Description to be %s, got %s", targetStruct.Description, event.Description) + } + if event.Infra != &targetStruct.Infra { + t.Errorf("Expected Infra to be %+v, got %+v", targetStruct.Infra, event.Infra) + } + default: + t.Errorf("Expected an event to be published") + } + } + }) +} +func FuzzConfirmInfraRegistration(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + request model.InfraIdentity + r store.StateData + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockServices.InfrastructureService. + On("ConfirmInfraRegistration", targetStruct.request, targetStruct.r). + Return(&model.ConfirmInfraRegistrationResponse{ + IsInfraConfirmed: true, + NewAccessKey: &targetStruct.request.AccessKey, + InfraID: &targetStruct.request.InfraID, + }, nil) + + response, err := mockServices.InfrastructureService.ConfirmInfraRegistration(targetStruct.request, targetStruct.r) + if err != nil { + t.Errorf("ChaosInfrastructure.ConfirmInfraRegistration() error = %v", err) + return + } + if response == nil { + t.Errorf("Returned environment is nil") + } + + }) +} + +func FuzzVerifyInfra(f *testing.F) { + + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + request := model.InfraIdentity{} + err := fuzzConsumer.GenerateStruct(&request) + if err != nil { + return + } + + mockServices := NewMockServices() + + expectedInfra := &dbChaosInfra.ChaosInfra{ + InfraID: request.InfraID, + AccessKey: request.AccessKey, + IsRegistered: true, + Version: request.Version, + } + + mockServices.InfrastructureService. + On("VerifyInfra", request). + Return(expectedInfra, nil) + + response, err := mockServices.InfrastructureService.VerifyInfra(request) + if err != nil { + t.Errorf("ChaosInfrastructure.VerifyInfra() error = %v", err) + return + } + if response == nil { + t.Errorf("Returned environment is nil") + } + + }) +} +func FuzzUpdateInfra(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + query bson.D + update bson.D + }{} + + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + + mockServices := NewMockServices() + mockServices.InfrastructureService. + On("UpdateInfra", targetStruct.query, targetStruct.update). + Return(nil) + + err = mockServices.InfrastructureService.UpdateInfra(targetStruct.query, targetStruct.update) + if err != nil { + t.Errorf("ChaosInfrastructure.UpdateInfra() error = %v", err) + return + } + + }) +} +func FuzzGetDBInfra(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + var infraID string + err := fuzzConsumer.GenerateStruct(&infraID) + if err != nil { + return + } + + mockServices := NewMockServices() + expectedInfra := dbChaosInfra.ChaosInfra{ + InfraID: infraID, + } + + mockServices.InfrastructureService. + On("GetDBInfra", infraID). + Return(expectedInfra, nil) + + response, err := mockServices.InfrastructureService.GetDBInfra(infraID) + if err != nil { + t.Errorf("ChaosInfrastructure.GetDBInfra() error = %v", err) + return + } + if response.InfraID != infraID { + t.Errorf("InfraID mismatch: got %v, want %v", response.InfraID, infraID) + } + }) +} diff --git a/chaoscenter/graphql/server/pkg/chaos_infrastructure/model/mocks/service.go b/chaoscenter/graphql/server/pkg/chaos_infrastructure/model/mocks/service.go index c20b5242771..fb3ac94bf0f 100644 --- a/chaoscenter/graphql/server/pkg/chaos_infrastructure/model/mocks/service.go +++ b/chaoscenter/graphql/server/pkg/chaos_infrastructure/model/mocks/service.go @@ -83,6 +83,11 @@ func (s *InfraService) KubeObj(request model.KubeObjectData, r store.StateData) return args.String(0), args.Error(1) } +func (s *InfraService) KubeNamespace(request model.KubeNamespaceData, r store.StateData) (string, error) { + args := s.Called(request, r) + return args.String(0), args.Error(1) +} + func (s *InfraService) UpdateInfra(query bson.D, update bson.D) error { args := s.Called(query, update) return args.Error(0) diff --git a/chaoscenter/graphql/server/pkg/chaos_infrastructure/service.go b/chaoscenter/graphql/server/pkg/chaos_infrastructure/service.go index abc3a5681c5..8c9663d241f 100644 --- a/chaoscenter/graphql/server/pkg/chaos_infrastructure/service.go +++ b/chaoscenter/graphql/server/pkg/chaos_infrastructure/service.go @@ -50,6 +50,7 @@ type Service interface { GetVersionDetails() (*model.InfraVersionDetails, error) QueryServerVersion(ctx context.Context) (*model.ServerVersionResponse, error) PodLog(request model.PodLog, r store.StateData) (string, error) + KubeNamespace(request model.KubeNamespaceData, r store.StateData) (string, error) KubeObj(request model.KubeObjectData, r store.StateData) (string, error) UpdateInfra(query bson.D, update bson.D) error GetDBInfra(infraID string) (dbChaosInfra.ChaosInfra, error) @@ -932,6 +933,9 @@ func fetchLatestVersion(versions map[int]string) int { // updateVersionFormat converts string array to int by removing decimal points, 1.0.0 will be returned as 100, 0.1.0 will be returned as 10, 0.0.1 will be returned as 1 func updateVersionFormat(str string) (int, error) { + if str == CIVersion { + return 0, nil + } var versionInt int versionSlice := strings.Split(str, ".") for i, val := range versionSlice { @@ -985,7 +989,7 @@ func (in *infraService) KubeObj(request model.KubeObjectData, r store.StateData) return "", err } if reqChan, ok := r.KubeObjectData[request.RequestID]; ok { - var kubeObjData []*model.KubeObject + var kubeObjData *model.KubeObject err = json.Unmarshal([]byte(request.KubeObj), &kubeObjData) if err != nil { return "", fmt.Errorf("failed to unmarshal kubeObj data %w", err) @@ -1002,6 +1006,31 @@ func (in *infraService) KubeObj(request model.KubeObjectData, r store.StateData) return "KubeData sent successfully", nil } +// KubeNamespace receives Kubernetes Namespace data from subscriber +func (in *infraService) KubeNamespace(request model.KubeNamespaceData, r store.StateData) (string, error) { + _, err := in.VerifyInfra(*request.InfraID) + if err != nil { + log.Print("Error", err) + return "", err + } + if reqChan, ok := r.KubeNamespaceData[request.RequestID]; ok { + var kubeNamespaceData []*model.KubeNamespace + err = json.Unmarshal([]byte(request.KubeNamespace), &kubeNamespaceData) + if err != nil { + return "", fmt.Errorf("failed to unmarshal kubeNamespace data %w", err) + } + + resp := model.KubeNamespaceResponse{ + InfraID: request.InfraID.InfraID, + KubeNamespace: kubeNamespaceData, + } + reqChan <- &resp + close(reqChan) + return "KubeData sent successfully", nil + } + return "KubeData sent successfully", nil +} + // SendInfraEvent sends events from the infras to the appropriate users listening for the events func (in *infraService) SendInfraEvent(eventType, eventName, description string, infra model.Infra, r store.StateData) { newEvent := model.InfraEventResponse{ @@ -1071,8 +1100,8 @@ func (in *infraService) VerifyInfra(identity model.InfraIdentity) (*dbChaosInfra } else { splitCPVersion := strings.Split(currentVersion, ".") splitSubVersion := strings.Split(identity.Version, ".") - if len(splitSubVersion) != 3 || splitSubVersion[0] != splitCPVersion[0] || splitSubVersion[1] != splitCPVersion[1] { - return nil, fmt.Errorf("ERROR: infra VERSION MISMATCH (need %v.%v.x got %v)", splitCPVersion[0], splitCPVersion[1], identity.Version) + if len(splitSubVersion) != 3 || splitSubVersion[0] != splitCPVersion[0] { + return nil, fmt.Errorf("ERROR: infra VERSION MISMATCH (need %v.x.x got %v)", splitCPVersion[0], identity.Version) } } infra, err := in.infraOperator.GetInfra(identity.InfraID) diff --git a/chaoscenter/graphql/server/pkg/chaos_infrastructure/types.go b/chaoscenter/graphql/server/pkg/chaos_infrastructure/types.go index 8a3d8ead071..64c90cc5328 100644 --- a/chaoscenter/graphql/server/pkg/chaos_infrastructure/types.go +++ b/chaoscenter/graphql/server/pkg/chaos_infrastructure/types.go @@ -11,6 +11,10 @@ type KubeObjData struct { Data []ObjectData `json:"data"` } +type KubeNamespace struct { + Name string `json:"Name"` +} + type ObjectData struct { Name string `json:"name"` UID types.UID `json:"uid"` diff --git a/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_fuzz_test.go b/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_fuzz_test.go new file mode 100644 index 00000000000..a505ad5a44c --- /dev/null +++ b/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_fuzz_test.go @@ -0,0 +1,246 @@ +package handler + +import ( + "archive/zip" + "encoding/json" + "os" + "path/filepath" + "strings" + "testing" + + fuzz "github.com/AdaLogics/go-fuzz-headers" + "github.com/google/uuid" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" +) + +func FuzzGetChartsPath(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + + chartsInput := model.CloningInput{} + err := fuzzConsumer.GenerateStruct(&chartsInput) + if err != nil { + return + } + projectID, _ := fuzzConsumer.GetString() + isDefault, _ := fuzzConsumer.GetBool() + + result := GetChartsPath(chartsInput, projectID, isDefault) + + if isDefault { + expected := DefaultPath + "default/" + chartsInput.Name + "/faults/" + if result != expected { + t.Errorf("Expected %s, got %s", expected, result) + } + } else { + expected := DefaultPath + projectID + "/" + chartsInput.Name + "/faults/" + if result != expected { + t.Errorf("Expected %s, got %s", expected, result) + } + } + }) +} + +func FuzzGetExperimentData(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte, filename string) { + fuzzConsumer := fuzz.NewConsumer(data) + + // Create a temporary directory + tmpDir, err := os.MkdirTemp("", "*-fuzztest") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) // clean up + + // Ensure the filename is valid and unique + safeFilename := filepath.Clean(filepath.Base(filename)) + if isInvalidFilename(safeFilename) { + safeFilename = "test.yaml" + } + filePath := filepath.Join(tmpDir, safeFilename) + content := ChaosChart{} + err = fuzzConsumer.GenerateStruct(&content) + if err != nil { + return + } + + jsonContent, _ := json.Marshal(content) + err = os.WriteFile(filePath, jsonContent, 0644) + if err != nil { + t.Fatal(err) + } + + _, err = GetExperimentData(filePath) + + if err != nil && !isInvalidYAML(jsonContent) && json.Valid(jsonContent) { + t.Errorf("UnExpected error for valid YAML, got error: %v", err) + } + if err == nil && isInvalidYAML(jsonContent) { + t.Errorf("Expected error for invalid YAML, got nil") + } + + _, err = ReadExperimentFile("./not_exist_file.yaml") + if err == nil { + t.Errorf("Expected error for file does not exist, got nil") + } + }) +} + +func FuzzReadExperimentYAMLFile(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte, filename string) { + fuzzConsumer := fuzz.NewConsumer(data) + + // Create a temporary directory + tmpDir, err := os.MkdirTemp("", "*-fuzztest") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) // clean up + + // Ensure the filename is valid and unique + safeFilename := filepath.Clean(filepath.Base(filename)) + if isInvalidFilename(safeFilename) { + safeFilename = "test.yaml" + } + filePath := filepath.Join(tmpDir, safeFilename) + content := ChaosChart{} + err = fuzzConsumer.GenerateStruct(&content) + if err != nil { + return + } + + jsonContent, _ := json.Marshal(content) + err = os.WriteFile(filePath, jsonContent, 0644) + if err != nil { + t.Fatal(err) + } + + _, err = ReadExperimentYAMLFile(filePath) + + if err != nil { + t.Errorf("UnExpected error for valid YAML, got error: %v", err) + } + + _, err = ReadExperimentFile("./not_exist_file.yaml") + if err == nil { + t.Errorf("Expected error for file does not exist, got nil") + } + }) +} + +func FuzzUnzipRemoteHub(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte, filename string, projectID string) { + // Create a temporary directory + tmpDir, err := os.MkdirTemp("", "*-fuzztest") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) // clean up + + // Ensure the filename is valid and unique + safeFilename := filepath.Clean(filepath.Base(filename)) + if isInvalidFilename(safeFilename) { + safeFilename = "test.zip" + } + if !strings.HasSuffix(safeFilename, ".zip") { + safeFilename += ".zip" + } + if isInvalidFilename(projectID) { + projectID = uuid.New().String() + } + + filePath := filepath.Join(tmpDir, safeFilename) + // Create a valid zip file + err = createValidZipFile(filePath, data) + if err != nil { + t.Fatal(err) + } + + err = UnzipRemoteHub(filePath, projectID) + + if err != nil { + t.Errorf("UnExpected error for valid zip, got error: %v", err) + } + + // Test with non-existent file + err = UnzipRemoteHub("./not_exist_file.zip", projectID) + if err == nil { + t.Errorf("Expected error for file does not exist, got nil") + } + + // Test with non-zip file + nonZipPath := filepath.Join(tmpDir, "no_zip") + err = os.WriteFile(nonZipPath, []byte("not a zip file"), 0644) + if err != nil { + t.Fatal(err) + } + err = UnzipRemoteHub(nonZipPath, projectID) + if err == nil { + t.Errorf("Expected error for no zip, got nil") + } + }) +} + +func FuzzIsFileExisting(f *testing.F) { + f.Fuzz(func(t *testing.T, filename string) { + // Create a temporary directory + tmpDir, err := os.MkdirTemp("", "*-fuzztest") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) // clean up + + // Ensure the filename is valid and unique + safeFilename := filepath.Clean(filepath.Base(filename)) + if isInvalidFilename(safeFilename) { + safeFilename = "test.yaml" + } + filePath := filepath.Join(tmpDir, safeFilename) + _, _ = os.Create(filePath) + + result, err := IsFileExisting(filePath) + if !result { + t.Errorf("Expected true for existing file, got false") + } + + result, err = IsFileExisting("./not_exist_file.yaml") + if result { + t.Errorf("Expected false for not existing file, got true") + } + }) +} + +func isInvalidFilename(filename string) bool { + return strings.IndexByte(filename, 0) != -1 || filename == "" || filename == "." || filename == ".." || filename == "/" || len(filename) > 255 +} + +func isInvalidYAML(data []byte) bool { + for _, b := range data { + if b < 32 || b == 127 { + return true + } + } + return false +} + +func createValidZipFile(filename string, data []byte) error { + zipFile, err := os.Create(filename) + if err != nil { + return err + } + defer zipFile.Close() + + zipWriter := zip.NewWriter(zipFile) + defer zipWriter.Close() + + f, err := zipWriter.Create("test.txt") + if err != nil { + return err + } + _, err = f.Write(data) + if err != nil { + return err + } + + return nil +} diff --git a/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_test.go b/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_test.go index ffcd2106ac3..1a30b1e012a 100644 --- a/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_test.go +++ b/chaoscenter/graphql/server/pkg/chaoshub/handler/handler_test.go @@ -72,11 +72,6 @@ func TestReadExperimentFile(t *testing.T) { filePath: "./temp1.yaml", isError: true, }, - { - name: "failure: file is not a yaml", - filePath: "./types.go", - isError: true, - }, } for _, tc := range testcases { // when diff --git a/chaoscenter/graphql/server/pkg/chaoshub/models_factory.go b/chaoscenter/graphql/server/pkg/chaoshub/models_factory.go index 0034aad025e..de8d3335a57 100644 --- a/chaoscenter/graphql/server/pkg/chaoshub/models_factory.go +++ b/chaoscenter/graphql/server/pkg/chaoshub/models_factory.go @@ -6,6 +6,7 @@ func NewCloningInputFrom(chaosHub model.CreateChaosHubRequest) model.CloningInpu return model.CloningInput{ RepoBranch: chaosHub.RepoBranch, RepoURL: chaosHub.RepoURL, + RemoteHub: chaosHub.RemoteHub, Name: chaosHub.Name, IsPrivate: chaosHub.IsPrivate, UserName: chaosHub.UserName, diff --git a/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go b/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go index 0a4950efef4..9480b144e6d 100644 --- a/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go +++ b/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/utils" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" @@ -284,7 +285,7 @@ func (c ChaosHubConfig) generateAuthMethod() (transport.AuthMethod, error) { var auth transport.AuthMethod if c.AuthType == model.AuthTypeToken { auth = &http.BasicAuth{ - Username: "litmus", // this can be anything except an empty string + Username: utils.Config.GitUsername, // must be a non-empty string or 'x-token-auth' for Bitbucket Password: *c.Token, } } else if c.AuthType == model.AuthTypeBasic { diff --git a/chaoscenter/graphql/server/pkg/chaoshub/service.go b/chaoscenter/graphql/server/pkg/chaoshub/service.go index 2c933363179..53f46cc975f 100644 --- a/chaoscenter/graphql/server/pkg/chaoshub/service.go +++ b/chaoscenter/graphql/server/pkg/chaoshub/service.go @@ -86,6 +86,7 @@ func (c *chaosHubService) AddChaosHub(ctx context.Context, chaosHub model.Create ProjectID: projectID, RepoURL: chaosHub.RepoURL, RepoBranch: chaosHub.RepoBranch, + RemoteHub: chaosHub.RemoteHub, ResourceDetails: mongodb.ResourceDetails{ Name: chaosHub.Name, Description: description, @@ -155,6 +156,7 @@ func (c *chaosHubService) AddRemoteChaosHub(ctx context.Context, chaosHub model. ProjectID: projectID, RepoURL: chaosHub.RepoURL, RepoBranch: "", + RemoteHub: chaosHub.RemoteHub, ResourceDetails: mongodb.ResourceDetails{ Name: chaosHub.Name, Description: description, @@ -226,6 +228,7 @@ func (c *chaosHubService) SaveChaosHub(ctx context.Context, chaosHub model.Creat ProjectID: projectID, RepoURL: chaosHub.RepoURL, RepoBranch: chaosHub.RepoBranch, + RemoteHub: chaosHub.RemoteHub, ResourceDetails: mongodb.ResourceDetails{ Name: chaosHub.Name, Description: description, @@ -273,6 +276,7 @@ func (c *chaosHubService) SyncChaosHub(ctx context.Context, hubID string, projec Name: chaosHub.Name, RepoURL: chaosHub.RepoURL, RepoBranch: chaosHub.RepoBranch, + RemoteHub: chaosHub.RemoteHub, IsPrivate: chaosHub.IsPrivate, UserName: chaosHub.UserName, Password: chaosHub.Password, @@ -311,6 +315,7 @@ func (c *chaosHubService) UpdateChaosHub(ctx context.Context, chaosHub model.Upd cloneHub := model.CloningInput{ RepoBranch: chaosHub.RepoBranch, RepoURL: chaosHub.RepoURL, + RemoteHub: chaosHub.RemoteHub, Name: chaosHub.Name, IsPrivate: chaosHub.IsPrivate, UserName: chaosHub.UserName, @@ -326,10 +331,11 @@ func (c *chaosHubService) UpdateChaosHub(ctx context.Context, chaosHub model.Upd } clonePath := DefaultPath + prevChaosHub.ProjectID + "/" + prevChaosHub.Name if prevChaosHub.HubType == string(model.HubTypeRemote) { - if prevChaosHub.Name != chaosHub.Name || prevChaosHub.RepoURL != chaosHub.RepoURL { + if prevChaosHub.Name != chaosHub.Name || prevChaosHub.RepoURL != chaosHub.RepoURL || prevChaosHub.RemoteHub != chaosHub.RemoteHub { remoteHub := model.CreateRemoteChaosHub{ - Name: chaosHub.Name, - RepoURL: chaosHub.RepoURL, + Name: chaosHub.Name, + RepoURL: chaosHub.RepoURL, + RemoteHub: chaosHub.RemoteHub, } err = os.RemoveAll(clonePath) if err != nil { @@ -342,7 +348,7 @@ func (c *chaosHubService) UpdateChaosHub(ctx context.Context, chaosHub model.Upd } } else { // Syncing/Cloning the repository at a path from ChaosHub link structure. - if prevChaosHub.Name != chaosHub.Name || prevChaosHub.RepoURL != chaosHub.RepoURL || prevChaosHub.RepoBranch != chaosHub.RepoBranch || prevChaosHub.IsPrivate != chaosHub.IsPrivate || prevChaosHub.AuthType != chaosHub.AuthType.String() { + if prevChaosHub.Name != chaosHub.Name || prevChaosHub.RepoURL != chaosHub.RepoURL || prevChaosHub.RepoBranch != chaosHub.RepoBranch || prevChaosHub.IsPrivate != chaosHub.IsPrivate || prevChaosHub.AuthType != chaosHub.AuthType.String() || prevChaosHub.RemoteHub != chaosHub.RemoteHub { err = os.RemoveAll(clonePath) if err != nil { return nil, err @@ -368,6 +374,7 @@ func (c *chaosHubService) UpdateChaosHub(ctx context.Context, chaosHub model.Upd {"$set", bson.D{ {"repo_url", chaosHub.RepoURL}, {"repo_branch", chaosHub.RepoBranch}, + {"remote_hub", chaosHub.RemoteHub}, {"name", chaosHub.Name}, {"description", chaosHub.Description}, {"tags", chaosHub.Tags}, @@ -454,6 +461,7 @@ func (c *chaosHubService) ListChaosFaults(ctx context.Context, hubID string, pro Name: hub.Name, RepoURL: hub.RepoURL, RepoBranch: hub.RepoBranch, + RemoteHub: hub.RemoteHub, } ChartsPath := handler.GetChartsPath(chartsInput, projectID, hub.IsDefault) @@ -516,6 +524,7 @@ func (c *chaosHubService) ListChaosHubs(ctx context.Context, projectID string, r }, RepoURL: defaultHub.RepoURL, RepoBranch: defaultHub.RepoBranch, + RemoteHub: defaultHub.RemoteHub, IsDefault: true, } @@ -651,6 +660,7 @@ func (c *chaosHubService) ListChaosHubs(ctx context.Context, projectID string, r UpdatedAt: strconv.Itoa(int(hub.UpdatedAt)), CreatedBy: &model.UserDetails{Username: hub.CreatedBy.Username}, UpdatedBy: &model.UserDetails{Username: hub.UpdatedBy.Username}, + RemoteHub: hub.RemoteHub, } hubDetails = append(hubDetails, hubDetail) } @@ -711,6 +721,7 @@ func (c *chaosHubService) GetChaosHub(ctx context.Context, chaosHubID string, pr UpdatedAt: strconv.Itoa(int(hub.UpdatedAt)), CreatedBy: &model.UserDetails{Username: hub.CreatedBy.Username}, UpdatedBy: &model.UserDetails{Username: hub.UpdatedBy.Username}, + RemoteHub: hub.RemoteHub, } return hubDetail, nil @@ -762,6 +773,7 @@ func (c *chaosHubService) getChaosHubDetails(ctx context.Context, hubID string, ProjectID: hub.ProjectID, RepoURL: hub.RepoURL, RepoBranch: hub.RepoBranch, + RemoteHub: hub.RemoteHub, AuthType: model.AuthType(hub.AuthType), Name: hub.Name, CreatedAt: strconv.Itoa(int(hub.CreatedAt)), @@ -879,6 +891,7 @@ func (c *chaosHubService) RecurringHubSync() { Name: chaosHub.Name, RepoURL: chaosHub.RepoURL, RepoBranch: chaosHub.RepoBranch, + RemoteHub: chaosHub.RemoteHub, IsPrivate: chaosHub.IsPrivate, AuthType: chaosHub.AuthType, Token: chaosHub.Token, diff --git a/chaoscenter/graphql/server/pkg/data-store/store.go b/chaoscenter/graphql/server/pkg/data-store/store.go index f101298ebe9..41336b021f7 100644 --- a/chaoscenter/graphql/server/pkg/data-store/store.go +++ b/chaoscenter/graphql/server/pkg/data-store/store.go @@ -13,6 +13,7 @@ type StateData struct { ExperimentEventPublish map[string][]chan *model.ExperimentRun ExperimentLog map[string]chan *model.PodLogResponse KubeObjectData map[string]chan *model.KubeObjectResponse + KubeNamespaceData map[string]chan *model.KubeNamespaceResponse Mutex *sync.Mutex } @@ -23,6 +24,7 @@ func NewStore() *StateData { ExperimentEventPublish: make(map[string][]chan *model.ExperimentRun), ExperimentLog: make(map[string]chan *model.PodLogResponse), KubeObjectData: make(map[string]chan *model.KubeObjectResponse), + KubeNamespaceData: make(map[string]chan *model.KubeNamespaceResponse), Mutex: &sync.Mutex{}, } } diff --git a/chaoscenter/graphql/server/pkg/database/mongodb/chaos_hub/schema.go b/chaoscenter/graphql/server/pkg/database/mongodb/chaos_hub/schema.go index 7e8205f1192..ed387474dcd 100644 --- a/chaoscenter/graphql/server/pkg/database/mongodb/chaos_hub/schema.go +++ b/chaoscenter/graphql/server/pkg/database/mongodb/chaos_hub/schema.go @@ -15,6 +15,7 @@ type ChaosHub struct { mongodb.Audit `bson:",inline"` RepoURL string `bson:"repo_url"` RepoBranch string `bson:"repo_branch"` + RemoteHub string `bson:"remote_hub"` IsPrivate bool `bson:"is_private"` AuthType string `bson:"auth_type"` HubType string `bson:"hub_type"` @@ -34,6 +35,7 @@ func (c *ChaosHub) GetOutputChaosHub() *model.ChaosHub { ProjectID: c.ProjectID, RepoURL: c.RepoURL, RepoBranch: c.RepoBranch, + RemoteHub: c.RemoteHub, Name: c.Name, Description: &c.Description, Tags: c.Tags, 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/environment/handler/handler.go b/chaoscenter/graphql/server/pkg/environment/handler/handler.go index 8cd437ac419..f70d743b188 100644 --- a/chaoscenter/graphql/server/pkg/environment/handler/handler.go +++ b/chaoscenter/graphql/server/pkg/environment/handler/handler.go @@ -228,7 +228,7 @@ func (e *EnvironmentService) ListEnvironments(projectID string, request *model.L } // Filtering based on given parameters - if request.Filter != nil { + if request != nil && request.Filter != nil { // Filtering based on chaos_infra name if request.Filter.Name != nil && *request.Filter.Name != "" { matchInfraNameStage := bson.D{ @@ -280,7 +280,7 @@ func (e *EnvironmentService) ListEnvironments(projectID string, request *model.L var sortStage bson.D switch { - case request.Sort != nil && request.Sort.Field == model.EnvironmentSortingFieldTime: + case request != nil && request.Sort != nil && request.Sort.Field == model.EnvironmentSortingFieldTime: // Sorting based on created time if request.Sort.Ascending != nil && *request.Sort.Ascending { sortStage = bson.D{ @@ -295,7 +295,7 @@ func (e *EnvironmentService) ListEnvironments(projectID string, request *model.L }}, } } - case request.Sort != nil && request.Sort.Field == model.EnvironmentSortingFieldName: + case request != nil && request.Sort != nil && request.Sort.Field == model.EnvironmentSortingFieldName: // Sorting based on ExperimentName time if request.Sort.Ascending != nil && *request.Sort.Ascending { sortStage = bson.D{ @@ -324,7 +324,7 @@ func (e *EnvironmentService) ListEnvironments(projectID string, request *model.L sortStage, } - if request.Pagination != nil { + if request != nil && request.Pagination != nil { paginationSkipStage := bson.D{ {"$skip", request.Pagination.Page * request.Pagination.Limit}, } @@ -353,6 +353,7 @@ func (e *EnvironmentService) ListEnvironments(projectID string, request *model.L pipeline = append(pipeline, facetStage) cursor, err := e.EnvironmentOperator.GetAggregateEnvironments(pipeline) + if err != nil { return nil, err } @@ -368,6 +369,7 @@ func (e *EnvironmentService) ListEnvironments(projectID string, request *model.L Environments: envs, }, errors.New("error decoding environment cursor: " + err.Error()) } + if len(aggregatedEnvironments) == 0 { return &model.ListEnvironmentResponse{ TotalNoOfEnvironments: 0, diff --git a/chaoscenter/graphql/server/pkg/gitops/gitops.go b/chaoscenter/graphql/server/pkg/gitops/gitops.go index c7b2afda308..8065ace8c30 100644 --- a/chaoscenter/graphql/server/pkg/gitops/gitops.go +++ b/chaoscenter/graphql/server/pkg/gitops/gitops.go @@ -11,6 +11,8 @@ import ( "strings" "time" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/utils" + "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" @@ -184,7 +186,7 @@ func (c GitConfig) getAuthMethod() (transport.AuthMethod, error) { case model.AuthTypeToken: return &http.BasicAuth{ - Username: "litmus", // this can be anything except an empty string + Username: utils.Config.GitUsername, // must be a non-empty string or 'x-token-auth' for Bitbucket Password: *c.Token, }, nil diff --git a/chaoscenter/graphql/server/pkg/gitops/service.go b/chaoscenter/graphql/server/pkg/gitops/service.go index 2c19987af22..9ddf4091c50 100644 --- a/chaoscenter/graphql/server/pkg/gitops/service.go +++ b/chaoscenter/graphql/server/pkg/gitops/service.go @@ -621,12 +621,11 @@ func (g *gitOpsService) updateExperiment(ctx context.Context, data, wfID, file s } revID := "" - updateRevision := false input, wfType, err := g.chaosExperimentService.ProcessExperiment(ctx, &experimentData, config.ProjectID, revID) if err != nil { return err } - return g.chaosExperimentService.ProcessExperimentUpdate(input, "git-ops", wfType, revID, updateRevision, config.ProjectID, dataStore.Store) + return g.chaosExperimentService.ProcessExperimentUpdate(input, "git-ops", wfType, revID, false, config.ProjectID, dataStore.Store) } // deleteExperiment helps in deleting experiment from DB during the SyncDBToGit operation diff --git a/chaoscenter/graphql/server/pkg/probe/handler/handler.go b/chaoscenter/graphql/server/pkg/probe/handler/handler.go index fa9d45cf46b..559e57e7ba0 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,593 @@ 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, + Source: cmdProbe.CmdProbeInputs.Source, + }, + 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, + Source: cmdProbe.CmdProbeInputs.Source, + }, + 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 + } + + if probe.KubernetesCMDProperties.Source != nil { + var source v1alpha1.SourceDetails + err := json.Unmarshal([]byte(*probe.KubernetesCMDProperties.Source), &source) + if err != nil { + logrus.Warnf("error unmarshalling soruce: %s - the source part of the probe is being ignored", err.Error()) + } + _probe.CmdProbeInputs.Source = &source + } + + 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{} diff --git a/chaoscenter/graphql/server/utils/variables.go b/chaoscenter/graphql/server/utils/variables.go index 678c7feb731..3818dc211f4 100644 --- a/chaoscenter/graphql/server/utils/variables.go +++ b/chaoscenter/graphql/server/utils/variables.go @@ -30,6 +30,7 @@ type Configuration struct { GrpcPort string `split_words:"true" default:"8000"` InfraCompatibleVersions string `required:"true" split_words:"true"` DefaultHubGitURL string `required:"true" default:"https://github.com/litmuschaos/chaos-charts"` + GitUsername string `required:"true" split_words:"true" default:"litmus"` DefaultHubBranchName string `required:"true" split_words:"true"` CustomChaosHubPath string `split_words:"true" default:"/tmp/"` DefaultChaosHubPath string `split_words:"true" default:"/tmp/default/"` diff --git a/chaoscenter/subscriber/Dockerfile b/chaoscenter/subscriber/Dockerfile index 17b71c3527a..20753cfe238 100644 --- a/chaoscenter/subscriber/Dockerfile +++ b/chaoscenter/subscriber/Dockerfile @@ -17,7 +17,7 @@ RUN CGO_ENABLED=0 go build -o /output/subscriber -v # Packaging stage # Use RedHat UBI minimal image as base -FROM registry.access.redhat.com/ubi9/ubi-minimal:9.4 +FROM registry.access.redhat.com/ubi9/ubi-minimal:9.5 LABEL maintainer="LitmusChaos" diff --git a/chaoscenter/subscriber/pkg/k8s/defination.go b/chaoscenter/subscriber/pkg/k8s/defination.go index 68b2a24883f..2adac87f32c 100644 --- a/chaoscenter/subscriber/pkg/k8s/defination.go +++ b/chaoscenter/subscriber/pkg/k8s/defination.go @@ -18,10 +18,13 @@ type SubscriberK8s interface { CreatePodLog(podLog types.PodLogRequest) (types.PodLog, error) SendPodLogs(infraData map[string]string, podLog types.PodLogRequest) GenerateLogPayload(cid, accessKey, version string, podLog types.PodLogRequest) ([]byte, error) - GetKubernetesObjects(request types.KubeObjRequest) ([]*types.KubeObject, error) + GetKubernetesNamespaces(request types.KubeNamespaceRequest) ([]*types.KubeNamespace, error) + GetKubernetesObjects(request types.KubeObjRequest) (*types.KubeObject, error) GetObjectDataByNamespace(namespace string, dynamicClient dynamic.Interface, resourceType schema.GroupVersionResource) ([]types.ObjectData, error) GenerateKubeObject(cid string, accessKey, version string, kubeobjectrequest types.KubeObjRequest) ([]byte, error) + GenerateKubeNamespace(cid string, accessKey, version string, kubenamespacerequest types.KubeNamespaceRequest) ([]byte, error) SendKubeObjects(infraData map[string]string, kubeobjectrequest types.KubeObjRequest) error + SendKubeNamespaces(infraData map[string]string, kubenamespacerequest types.KubeNamespaceRequest) error CheckComponentStatus(componentEnv string) error IsAgentConfirmed() (bool, string, error) AgentRegister(accessKey string) (bool, error) diff --git a/chaoscenter/subscriber/pkg/k8s/objects.go b/chaoscenter/subscriber/pkg/k8s/objects.go index 143ea9f3785..d23bd51466f 100644 --- a/chaoscenter/subscriber/pkg/k8s/objects.go +++ b/chaoscenter/subscriber/pkg/k8s/objects.go @@ -23,63 +23,72 @@ var ( InfraScope = os.Getenv("INFRA_SCOPE") ) -// GetKubernetesObjects is used to get the Kubernetes Object details according to the request type -func (k8s *k8sSubscriber) GetKubernetesObjects(request types.KubeObjRequest) ([]*types.KubeObject, error) { - conf, err := k8s.GetKubeConfig() - if err != nil { - return nil, err - } - clientset, err := kubernetes.NewForConfig(conf) - if err != nil { - return nil, err - } +// GetKubernetesNamespaces is used to get the list of Kubernetes Namespaces +func (k8s *k8sSubscriber) GetKubernetesNamespaces(request types.KubeNamespaceRequest) ([]*types.KubeNamespace, error) { - resourceType := schema.GroupVersionResource{ - Group: request.KubeGVRRequest.Group, - Version: request.KubeGVRRequest.Version, - Resource: request.KubeGVRRequest.Resource, - } - _, dynamicClient, err := k8s.GetDynamicAndDiscoveryClient() - if err != nil { - return nil, err - } - var ObjData []*types.KubeObject + var namespaceData []*types.KubeNamespace if strings.ToLower(InfraScope) == "namespace" { - dataList, err := k8s.GetObjectDataByNamespace(InfraNamespace, dynamicClient, resourceType) + // In case of namespace scope, only one namespace is available + KubeNamespace := &types.KubeNamespace{ + Name: InfraNamespace, + } + namespaceData = append(namespaceData, KubeNamespace) + } else { + // In case of cluster scope, get all the namespaces + conf, err := k8s.GetKubeConfig() if err != nil { return nil, err } - KubeObj := &types.KubeObject{ - Namespace: InfraNamespace, - Data: dataList, + clientset, err := kubernetes.NewForConfig(conf) + if err != nil { + return nil, err } - ObjData = append(ObjData, KubeObj) - } else { + namespace, err := clientset.CoreV1().Namespaces().List(context.TODO(), metav1.ListOptions{}) if err != nil { return nil, err } - if len(namespace.Items) > 0 { for _, namespace := range namespace.Items { - podList, err := k8s.GetObjectDataByNamespace(namespace.GetName(), dynamicClient, resourceType) - if err != nil { - return nil, err - } - KubeObj := &types.KubeObject{ - Namespace: namespace.GetName(), - Data: podList, + + KubeNamespace := &types.KubeNamespace{ + Name: namespace.GetName(), } - ObjData = append(ObjData, KubeObj) + + namespaceData = append(namespaceData, KubeNamespace) } } else { return nil, errors.New("No namespace available") } + } + //TODO Maybe add marshal/unmarshal here + return namespaceData, nil +} +// GetKubernetesObjects is used to get the Kubernetes Object details according to the request type +func (k8s *k8sSubscriber) GetKubernetesObjects(request types.KubeObjRequest) (*types.KubeObject, error) { + resourceType := schema.GroupVersionResource{ + Group: request.KubeGVRRequest.Group, + Version: request.KubeGVRRequest.Version, + Resource: request.KubeGVRRequest.Resource, } - kubeData, _ := json.Marshal(ObjData) - var kubeObjects []*types.KubeObject + _, dynamicClient, err := k8s.GetDynamicAndDiscoveryClient() + if err != nil { + return nil, err + } + + dataList, err := k8s.GetObjectDataByNamespace(request.Namespace, dynamicClient, resourceType) + if err != nil { + return nil, err + } + KubeObj := &types.KubeObject{ + Namespace: InfraNamespace, + Data: dataList, + } + + kubeData, _ := json.Marshal(KubeObj) + var kubeObjects *types.KubeObject err = json.Unmarshal(kubeData, &kubeObjects) if err != nil { return nil, err @@ -118,6 +127,22 @@ func (k8s *k8sSubscriber) updateLabels(labels map[string]string) []string { return updatedLabels } +func (k8s *k8sSubscriber) GenerateKubeNamespace(cid string, accessKey, version string, kubenamespacerequest types.KubeNamespaceRequest) ([]byte, error) { + infraID := `{infraID: \"` + cid + `\", version: \"` + version + `\", accessKey: \"` + accessKey + `\"}` + kubeObj, err := k8s.GetKubernetesNamespaces(kubenamespacerequest) + if err != nil { + return nil, err + } + processed, err := k8s.gqlSubscriberServer.MarshalGQLData(kubeObj) + if err != nil { + return nil, err + } + mutation := `{ infraID: ` + infraID + `, requestID:\"` + kubenamespacerequest.RequestID + `\", kubeNamespace:\"` + processed[1:len(processed)-1] + `\"}` + + var payload = []byte(`{"query":"mutation { kubeNamespace(request:` + mutation + ` )}"}`) + return payload, nil +} + func (k8s *k8sSubscriber) GenerateKubeObject(cid string, accessKey, version string, kubeobjectrequest types.KubeObjRequest) ([]byte, error) { infraID := `{infraID: \"` + cid + `\", version: \"` + version + `\", accessKey: \"` + accessKey + `\"}` kubeObj, err := k8s.GetKubernetesObjects(kubeobjectrequest) @@ -134,6 +159,25 @@ func (k8s *k8sSubscriber) GenerateKubeObject(cid string, accessKey, version stri return payload, nil } +// SendKubeNamespace generates graphql mutation to send kubernetes namespaces data to graphql server +func (k8s *k8sSubscriber) SendKubeNamespaces(infraData map[string]string, kubenamespacerequest types.KubeNamespaceRequest) error { + // generate graphql payload + payload, err := k8s.GenerateKubeNamespace(infraData["INFRA_ID"], infraData["ACCESS_KEY"], infraData["VERSION"], kubenamespacerequest) + if err != nil { + logrus.WithError(err).Print("Error while getting KubeObject Data") + return err + } + + body, err := k8s.gqlSubscriberServer.SendRequest(infraData["SERVER_ADDR"], payload) + if err != nil { + logrus.Print(err.Error()) + return err + } + + logrus.Println("Response", body) + return nil +} + // SendKubeObjects generates graphql mutation to send kubernetes objects data to graphql server func (k8s *k8sSubscriber) SendKubeObjects(infraData map[string]string, kubeobjectrequest types.KubeObjRequest) error { // generate graphql payload diff --git a/chaoscenter/subscriber/pkg/requests/webhook.go b/chaoscenter/subscriber/pkg/requests/webhook.go index 1407d6e44f4..cafea2d921a 100644 --- a/chaoscenter/subscriber/pkg/requests/webhook.go +++ b/chaoscenter/subscriber/pkg/requests/webhook.go @@ -120,6 +120,21 @@ func (req *subscriberRequests) RequestProcessor(infraData map[string]string, r t return errors.New("error getting kubernetes object data: " + err.Error()) } } + if strings.Index("kubenamespace kubenamespaces", strings.ToLower(r.Payload.Data.InfraConnect.Action.RequestType)) >= 0 { + KubeNamespaceRequest := types.KubeNamespaceRequest{ + RequestID: r.Payload.Data.InfraConnect.Action.RequestID, + } + + err := json.Unmarshal([]byte(r.Payload.Data.InfraConnect.Action.ExternalData), &KubeNamespaceRequest) + if err != nil { + return errors.New("failed to json unmarshal: " + err.Error()) + } + + err = req.subscriberK8s.SendKubeNamespaces(infraData, KubeNamespaceRequest) + if err != nil { + return errors.New("error getting kubernetes namespace data: " + err.Error()) + } + } if strings.ToLower(r.Payload.Data.InfraConnect.Action.RequestType) == "logs" { podRequest := types.PodLogRequest{ RequestID: r.Payload.Data.InfraConnect.Action.RequestID, diff --git a/chaoscenter/subscriber/pkg/types/kubeobject.go b/chaoscenter/subscriber/pkg/types/kubeobject.go index e862cc0b875..baa917a76e5 100644 --- a/chaoscenter/subscriber/pkg/types/kubeobject.go +++ b/chaoscenter/subscriber/pkg/types/kubeobject.go @@ -14,6 +14,7 @@ type KubeObject struct { type KubeObjRequest struct { RequestID string InfraID string `json:"infraID"` + Namespace string `json:"namespace"` ObjectType string `json:"objectType"` KubeGVRRequest KubeGVRRequest `json:"kubeObjRequest"` } @@ -24,6 +25,16 @@ type KubeGVRRequest struct { Resource string `json:"resource"` } +// Not really useful at the moment but we might need other fields in the future +type KubeNamespace struct { + Name string `json:"name"` +} + +type KubeNamespaceRequest struct { + RequestID string + InfraID string `json:"infraID"` +} + type ObjectData struct { Name string `json:"name"` UID types.UID `json:"uid"` diff --git a/chaoscenter/upgrade-agents/control-plane/CONTRIBUTING.MD b/chaoscenter/upgrade-agents/control-plane/CONTRIBUTING.MD new file mode 100644 index 00000000000..6f4aedf01c1 --- /dev/null +++ b/chaoscenter/upgrade-agents/control-plane/CONTRIBUTING.MD @@ -0,0 +1,73 @@ +## Steps to Contribute + +Fixes and improvements can be directly addressed by sending a Pull Request on GitHub. Pull requests will be reviewed by one or more maintainers and merged when acceptable. + +We ask that before contributing, please make the effort to coordinate with the maintainers of the project before submitting large or high impact PRs. This will prevent you from doing extra work that may or may not be merged. + +Use your judgement about what constitutes a large change. If you aren't sure, send a message to the **#litmus-dev** slack or submit an issue on GitHub. + + +### **Sign your work with Developer Certificate of Origin** + +To contribute to this project, you must agree to the Developer Certificate of Origin (DCO) for each commit you make. The DCO is a simple statement that you, as a contributor, have the legal right to make the contribution. + +See the [DCO](https://developercertificate.org/) file for the full text of what you must agree to. + +To successfully sign off your contribution you just add a line to every git commit message: + +```git +Signed-off-by: Joe Smith +``` + +Use your real name (sorry, no pseudonyms or anonymous contributions.) + +If you set your `user.name` and `user.email` git configs, you can sign your commit automatically with `git commit -s`. You can also use git [aliases](https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases) like `git config --global alias.ci 'commit -s'`. Now you can commit with git ci and the commit will be signed. + +## **Development Guide** + +Start MongoDB, Auth and GraphQL server as mentioned in the [ChaosCenter Development Guide](https://github.com/litmuschaos/litmus/wiki/ChaosCenter-Development-Guide) to set up the basic structure of the DB. Then start the upgrade manager located in `chaoscenter/upgrade-agents/control-plane` by setting up the environment variables + +``` +export DB_SERVER="mongodb://m1:27015,m2:27016,m3:27017/?replicaSet=rs0" +export DB_USER=admin +export DB_PASSWORD=1234 +export VERSION= +``` +To run the upgrade-manager, run + +``` +go run main.go +``` +The upgrade-manager would get the current version of Litmus through the DB. + +## **Version Upgrade Files** + +`/` folder contains files for the upgrade logic + +- `upgrade-manager.go` - Contains a map of versions with their corresponding version-managers for the versions. +- `vx.y.z/manager.go` - Instantiates the Version Manager and runs the upgradeExecutor in transactions which can be omitted if the operation doesn't support a transaction. +- `vx.y.z/upgrade.go` - Contains the logic of upgradeExecutor of what schema changes are to be made in the specific version. + +There are some other files not mentioned here. + +## **Example: Upgrade to version 3.9.0** + +In version 3.9.0 the following changes are done in DB schema + +- In projects collection (auth DB), member role is updated from `Editor` to `Executor` +- New `is_initial_login` field in users collection (auth DB) whose value is set as false + +Run the upgrade-agent while specifying the version `VERSION=3.9.0` in the environmental variable, and it should now be upgraded. + +## **Best Practices** + +1) If upgrade volume is huge, then transaction is not favorable. +2) Split the upgrades into proprietary functions depending on their purpose and database/collection names. +3) Use logging techniques as used in other versions to provide the user an insight of how the upgrades are being done. +4) While using a transaction, make sure the session context is properly passed into the relevant mongo operations and related functions. +5) Script should be written in a way that even if run twice, should not affect the already updated documents. + + +Below is the basic technical flow for the upgrade-agent + +![image info](./Upgrade-Agent-Flow.png) \ No newline at end of file diff --git a/chaoscenter/upgrade-agents/control-plane/Upgrade-Agent-Flow.png b/chaoscenter/upgrade-agents/control-plane/Upgrade-Agent-Flow.png new file mode 100644 index 00000000000..8e086829573 Binary files /dev/null and b/chaoscenter/upgrade-agents/control-plane/Upgrade-Agent-Flow.png differ diff --git a/chaoscenter/upgrade-agents/control-plane/go.mod b/chaoscenter/upgrade-agents/control-plane/go.mod index b8378a44376..bd6a4c2dc9a 100644 --- a/chaoscenter/upgrade-agents/control-plane/go.mod +++ b/chaoscenter/upgrade-agents/control-plane/go.mod @@ -1,29 +1,35 @@ -module github.com/litmuschaos/litmus/litmus-portal/upgrader-agents/control-plane +module github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane go 1.22 +toolchain go1.23.7 require ( github.com/kelseyhightower/envconfig v1.4.0 - go.mongodb.org/mongo-driver v1.7.1 - go.uber.org/zap v1.18.1 + github.com/sirupsen/logrus v1.4.2 + go.mongodb.org/mongo-driver v1.11.9 ) require ( - github.com/go-stack/stack v1.8.0 // indirect - github.com/golang/snappy v0.0.1 // indirect - github.com/google/go-cmp v0.5.5 // indirect - github.com/klauspost/compress v1.9.5 // indirect + github.com/jessevdk/go-flags v1.5.0 // indirect + github.com/montanaflynn/stats v0.7.1 // indirect + golang.org/x/net v0.36.0 // indirect + golang.org/x/term v0.29.0 // indirect + gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect +) + +require ( + github.com/golang/snappy v0.0.4 // indirect + github.com/klauspost/compress v1.17.8 // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect + github.com/mongodb/mongo-tools v0.0.0-20240711192303-088725fbaf4b github.com/pkg/errors v0.9.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect - github.com/xdg-go/scram v1.0.2 // indirect - github.com/xdg-go/stringprep v1.0.2 // indirect - github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.7.0 // indirect - golang.org/x/crypto v0.17.0 // indirect - golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect - golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect + github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect + golang.org/x/crypto v0.35.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect ) diff --git a/chaoscenter/upgrade-agents/control-plane/go.sum b/chaoscenter/upgrade-agents/control-plane/go.sum index 421b34fb91b..27b7330604b 100644 --- a/chaoscenter/upgrade-agents/control-plane/go.sum +++ b/chaoscenter/upgrade-agents/control-plane/go.sum @@ -1,153 +1,121 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= +github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -github.com/klauspost/compress v1.9.5 h1:U+CaK85mrNNb4k8BNOfgJtJ/gr6kswUCFj6miSzVC6M= -github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mongodb/mongo-tools v0.0.0-20240711192303-088725fbaf4b h1:39IJuPXnaNCjLk6tMywL0OheXyx7S+BTIgn1LUwSrq8= +github.com/mongodb/mongo-tools v0.0.0-20240711192303-088725fbaf4b/go.mod h1:ZqxDY87qeUsPRQ/H8DAOhp4iQA2zQtn2zR/KmLSsA7U= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/smarty/assertions v1.15.0 h1:cR//PqUBUiQRakZWqBiFFQ9wb8emQGDb0HeGdqGByCY= +github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec= +github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY= +github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= -go.mongodb.org/mongo-driver v1.7.1 h1:jwqTeEM3x6L9xDXrCxN0Hbg7vdGfPBOTIkr0+/LYZDA= -go.mongodb.org/mongo-driver v1.7.1/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8NzkI+yfU8= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.mongodb.org/mongo-driver v1.11.9 h1:JY1e2WLxwNuwdBAPgQxjf4BWweUGP86lF55n89cGZVA= +go.mongodb.org/mongo-driver v1.11.9/go.mod h1:P8+TlbZtPFgjUrmnIF41z97iDnSMswJJu6cztZSlCTg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= +golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA= +golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs= +gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/chaoscenter/upgrade-agents/control-plane/main.go b/chaoscenter/upgrade-agents/control-plane/main.go index 6882940796f..df8a2577797 100644 --- a/chaoscenter/upgrade-agents/control-plane/main.go +++ b/chaoscenter/upgrade-agents/control-plane/main.go @@ -2,13 +2,11 @@ package main import ( "log" - "os" - "strings" "github.com/kelseyhightower/envconfig" - "github.com/litmuschaos/litmus/litmus-portal/upgrader-agents/control-plane/pkg/database" - "github.com/litmuschaos/litmus/litmus-portal/upgrader-agents/control-plane/versions" - "go.uber.org/zap" + "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/pkg/database" + "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/versions" + logger "github.com/sirupsen/logrus" ) type Config struct { @@ -28,35 +26,23 @@ func init() { } func main() { - // logging level, dev mode enables debug logs - dev := os.Getenv("DEV_MODE") - var logger *zap.Logger - var err error - - // set log level - if strings.ToLower(dev) == "true" { - logger, err = zap.NewDevelopment() - } else { - logger, err = zap.NewProduction() - } - if err != nil { - log.Fatal("failed to create logger") - } // create database connection + var err error + logger := logger.New() dbClient, err := database.Connect() if err != nil { - logger.Fatal("failed to get db client", zap.Error(err)) + logger.WithError(err).Fatal("failed to get db client") } // create new upgrade manager mg, err := versions.NewUpgradeManager(logger, dbClient) if err != nil { - logger.Fatal("failed to create upgrade manager", zap.Error(err)) + logger.WithError(err).Fatal("failed to create upgrade manager") } if mg != nil { // execute upgrade manager if err = mg.Run(); err != nil { - logger.Fatal("failed to run upgrade manager", zap.Error(err)) + logger.WithError(err).Fatal("failed to run upgrade manager") } } diff --git a/chaoscenter/upgrade-agents/control-plane/pkg/database/constants.go b/chaoscenter/upgrade-agents/control-plane/pkg/database/constants.go index 0f5d53fd3bf..1a56dcb3999 100644 --- a/chaoscenter/upgrade-agents/control-plane/pkg/database/constants.go +++ b/chaoscenter/upgrade-agents/control-plane/pkg/database/constants.go @@ -1,6 +1,13 @@ package database const ( - ServerConfigCollection = "server-config-collection" - DbName = "litmus" + ServerConfigCollection = "serverConfig" + LitmusDB = "litmus" + EnvironmentCollection = "environment" + ProjectCollection = "project" + DBUri = "mongodb://m1:27015,m2:27016,m3:27017/?replicaSet=rs0" + AuthDB = "auth" + AdminDB = "admin" + UsersCollection = "users" + WorkflowCollection = "workflow-collection" ) diff --git a/chaoscenter/upgrade-agents/control-plane/pkg/database/mongo-export.go b/chaoscenter/upgrade-agents/control-plane/pkg/database/mongo-export.go new file mode 100644 index 00000000000..c453b96df0a --- /dev/null +++ b/chaoscenter/upgrade-agents/control-plane/pkg/database/mongo-export.go @@ -0,0 +1,59 @@ +package database + +import ( + "log" + "os" + + "github.com/mongodb/mongo-tools/mongoexport" + "github.com/mongodb/mongo-tools/mongoimport" +) + +func Export(filename string, RawArgs []string) error { + file, err := os.Create(filename) + if err != nil { + return err + } + defer file.Close() + + Options, err := mongoexport.ParseOptions(RawArgs, "", "") + if err != nil { + return err + } + MongoExport, err := mongoexport.New(Options) + if err != nil { + return err + } + defer MongoExport.Close() + + _, err = MongoExport.Export(file) + if err != nil { + return err + } + + return nil +} + +func Import(filename string, RawArgs []string) error { + + Options, err := mongoimport.ParseOptions(RawArgs, "", "") + if err != nil { + return err + } + + MongoImport, err := mongoimport.New(Options) + if err != nil { + return err + } + defer MongoImport.Close() + + // Import documents into 'test' collection + success, failed, err := MongoImport.ImportDocuments() + if err != nil { + return err + } + if failed > 0 { + log.Fatal("Could not import documents", success) + } + + return nil +} diff --git a/chaoscenter/upgrade-agents/control-plane/pkg/database/server-config.go b/chaoscenter/upgrade-agents/control-plane/pkg/database/server-config.go index ba9b0ec2aaa..5d1612ddd8f 100644 --- a/chaoscenter/upgrade-agents/control-plane/pkg/database/server-config.go +++ b/chaoscenter/upgrade-agents/control-plane/pkg/database/server-config.go @@ -15,7 +15,7 @@ type ServerConfig struct { // GetVersion returns the control plane version that is stored in the ServerConfig collection func GetVersion(dbClient *mongo.Client) (ServerConfig, error) { - collection := dbClient.Database(DbName).Collection(ServerConfigCollection) + collection := dbClient.Database(LitmusDB).Collection(ServerConfigCollection) result := collection.FindOne(context.Background(), bson.D{ {"key", "version"}, }) @@ -27,7 +27,7 @@ func GetVersion(dbClient *mongo.Client) (ServerConfig, error) { // UpdateVersion updates the control plane version in the ServerConfig collection func UpdateVersion(dbClient *mongo.Client, version string) error { - collection := dbClient.Database(DbName).Collection(ServerConfigCollection) + collection := dbClient.Database(LitmusDB).Collection(ServerConfigCollection) _, err := collection.UpdateOne(context.Background(), bson.D{ {"key", "version"}, }, bson.D{{"$set", bson.D{{ diff --git a/chaoscenter/upgrade-agents/control-plane/test.txt b/chaoscenter/upgrade-agents/control-plane/test.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/chaoscenter/upgrade-agents/control-plane/versions/upgrade-manager.go b/chaoscenter/upgrade-agents/control-plane/versions/upgrade-manager.go index f904ad1d36f..fa6cf287658 100644 --- a/chaoscenter/upgrade-agents/control-plane/versions/upgrade-manager.go +++ b/chaoscenter/upgrade-agents/control-plane/versions/upgrade-manager.go @@ -3,14 +3,17 @@ package versions import ( "fmt" "os" + "sort" + "strconv" + "strings" - v2_6_0 "github.com/litmuschaos/litmus/litmus-portal/upgrader-agents/control-plane/versions/v2.6.0" + v0_0_0 "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/versions/v0.0.0" - v2_4_0 "github.com/litmuschaos/litmus/litmus-portal/upgrader-agents/control-plane/versions/v2.4.0" + v3_9_0 "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/versions/v3.9.0" - "github.com/litmuschaos/litmus/litmus-portal/upgrader-agents/control-plane/pkg/database" + "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/pkg/database" + log "github.com/sirupsen/logrus" "go.mongodb.org/mongo-driver/mongo" - "go.uber.org/zap" ) // UpgradeExecutor holds the details regarding the version and IVersionManager for a particular version @@ -21,15 +24,70 @@ type UpgradeExecutor struct { // UpgradeManager provides the functionality required to upgrade from the PreviousVersion to the TargetVersion type UpgradeManager struct { - Logger *zap.Logger + Logger *log.Logger DBClient *mongo.Client - PreviousVersion string - TargetVersion string + PreviousVersion *Version + TargetVersion *Version +} + +type Version struct { + Major int + Minor int + Patch int + Beta int +} + +// Converts version from type string to type Version +// For example, "3.0.0-beta1" -> Version{Major: 3, Minor: 0, Patch: 0, Beta: 1} +// "3.1.0" -> Version{Major: 3, Minor: 1, Patch: 0, Beta: 0}, "3.1.1" -> Version{Major: 3, Minor: 1, Patch: 1, Beta: 0} +func ParseVersion(version string) *Version { + parts := strings.Split(version, "-beta") + mainParts := strings.Split(parts[0], ".") + + major, err := strconv.Atoi(mainParts[0]) + if err != nil { + return &Version{} + } + + minor, err := strconv.Atoi(mainParts[1]) + if err != nil { + return &Version{} + } + + mainPartsLength := len(mainParts) + + var patch int + + if mainPartsLength > 2 { + patch, err = strconv.Atoi(mainParts[2]) + if err != nil { + patch = 0 + } + } else { + patch = 0 + } + + if len(parts) > 1 { + beta, err := strconv.Atoi(parts[1]) + if err != nil { + return &Version{} + } + return &Version{Major: major, Minor: minor, Patch: patch, Beta: beta} + } else { + return &Version{Major: major, Minor: minor, Patch: patch, Beta: 0} + } } // NewUpgradeManager creates an instance of a upgrade manager with the proper configurations -func NewUpgradeManager(logger *zap.Logger, dbClient *mongo.Client) (*UpgradeManager, error) { +func NewUpgradeManager(logger *log.Logger, dbClient *mongo.Client) (*UpgradeManager, error) { + + // added for debug only to run version manager consistently + // database.UpdateVersion(dbClient, "3.3.0") + currentVersion := os.Getenv("VERSION") + log.WithFields(log.Fields{ + "targetVersion": currentVersion, + }).Info("About target version") if currentVersion == "" { return nil, fmt.Errorf("current version env data missing") } @@ -37,6 +95,11 @@ func NewUpgradeManager(logger *zap.Logger, dbClient *mongo.Client) (*UpgradeMana if err != nil { return nil, fmt.Errorf("failed to get previous version data from db, error=%w", err) } + + log.WithFields(log.Fields{ + "currentVersion": config.Value, + }).Info("About current version") + if config.Value == nil || config.Value.(string) == "" { return nil, fmt.Errorf("failed to get previous version data from db, value=%v", config.Value) } @@ -48,165 +111,135 @@ func NewUpgradeManager(logger *zap.Logger, dbClient *mongo.Client) (*UpgradeMana return &UpgradeManager{ Logger: logger, DBClient: dbClient, - PreviousVersion: config.Value.(string), - TargetVersion: currentVersion, + PreviousVersion: ParseVersion(config.Value.(string)), + TargetVersion: ParseVersion(currentVersion), }, nil } -// getUpgradePath returns a map that determines the possible upgrade path for any upgrade -func (m *UpgradeManager) getUpgradePath() map[string]UpgradeExecutor { +// getVersionMap returns a map that determines the possible upgrade path for any upgrade +func (m *UpgradeManager) getVersionMap() map[string]UpgradeExecutor { // key : previous version, // value :{ Version Manger that upgrades the system from priv version to next, NextVersion points to next version in the path} return map[string]UpgradeExecutor{ - "2.3.0": { - NextVersion: "2.4.0", - VersionManager: v2_4_0.NewVersionManger(m.Logger, m.DBClient), - }, - - "2.4.0": { - NextVersion: "2.5.0", - VersionManager: nil, - }, - - "2.5.0": { - NextVersion: "2.6.0", - VersionManager: v2_6_0.NewVersionManger(m.Logger, m.DBClient), - }, - - "2.6.0": { - NextVersion: "2.7.0", - VersionManager: nil, - }, - - "2.7.0": { - NextVersion: "2.8.0", - VersionManager: nil, - }, - - "2.8.0": { - NextVersion: "2.9.0", - VersionManager: nil, - }, - - "2.9.0": { - NextVersion: "2.10.0", - VersionManager: nil, - }, - - "2.10.0": { - NextVersion: "2.11.0", - VersionManager: nil, - }, - - "2.11.0": { - NextVersion: "2.12.0", - VersionManager: nil, + "0.0.0": { + NextVersion: "", + VersionManager: v0_0_0.NewVersionManger(m.Logger, m.DBClient), }, - - "2.12.0": { - NextVersion: "2.13.0", - VersionManager: nil, + "3.9.0": { + NextVersion: "", + VersionManager: v3_9_0.NewVersionManger(m.Logger, m.DBClient), }, + } +} - "2.13.0": { - NextVersion: "2.14.0", - VersionManager: nil, - }, +func arrayToVersion(versionArray []int) string { + if versionArray[3] == 0 { + return strconv.Itoa(versionArray[0]) + "." + strconv.Itoa(versionArray[1]) + "." + strconv.Itoa(versionArray[2]) + } else { + return strconv.Itoa(versionArray[0]) + "." + strconv.Itoa(versionArray[1]) + "." + strconv.Itoa(versionArray[2]) + "-beta" + strconv.Itoa(versionArray[3]) + } +} - "2.14.0": { - NextVersion: "3.0-beta1", - VersionManager: nil, - }, +func (v Version) getVersion() string { + if v.Beta != 0 { + return strconv.Itoa(v.Major) + "." + strconv.Itoa(v.Minor) + "." + strconv.Itoa(v.Patch) + "-beta" + strconv.Itoa(v.Beta) + } else { + return strconv.Itoa(v.Major) + "." + strconv.Itoa(v.Minor) + "." + strconv.Itoa(v.Patch) + } +} - "3.0-beta1": { - NextVersion: "3.0.0-beta2", - VersionManager: nil, - }, +// sortVersionArray sorts the version array containing the versions as strings in ascending order +func sortVersionArray(versionArray []string) []string { + var versionMatrix [][]int - "3.0.0-beta2": { - NextVersion: "3.0.0-beta3", - VersionManager: nil, - }, + for _, v := range versionArray { + var versionInt []int - "3.0.0-beta3": { - NextVersion: "3.0.0-beta4", - VersionManager: nil, - }, + version := ParseVersion(v) + versionInt = append(versionInt, version.Major, version.Minor, version.Patch, version.Beta) + versionMatrix = append(versionMatrix, versionInt) + } + sort.Slice(versionMatrix, func(i, j int) bool { + for k := 0; k < len(versionMatrix[i]) && k < len(versionMatrix[j]); k++ { + if versionMatrix[i][k] != versionMatrix[j][k] { + return versionMatrix[i][k] < versionMatrix[j][k] + } + } + return len(versionMatrix[i]) < len(versionMatrix[j]) + }) - "3.0.0-beta4": { - NextVersion: "3.0.0-beta5", - VersionManager: nil, - }, + var sortedVersionArray []string - "3.0.0-beta5": { - NextVersion: "3.0.0-beta6", - VersionManager: nil, - }, + for _, v := range versionMatrix { + sortedVersionArray = append(sortedVersionArray, arrayToVersion(v)) + } + // Print the sorted matrixay + return sortedVersionArray +} - "3.0.0-beta6": { - NextVersion: "3.0.0-beta7", - VersionManager: nil, - }, +func parseVersionMap(m map[string]UpgradeExecutor, previousVersion string, targetVersion string) []string { + var versions []string + for version := range m { + versions = append(versions, version) + } + _, okP := m[previousVersion] + _, okT := m[targetVersion] - "3.0.0-beta7": { - NextVersion: "3.0.0-beta8", - VersionManager: nil, - }, + if !okP { + versions = append(versions, previousVersion) + } - // latest version, no more upgrades available - "3.0.0-beta8": { - NextVersion: "", - VersionManager: nil, - }, + if !okT { + versions = append(versions, targetVersion) } + return sortVersionArray(versions) } -// verifyPath verifies whether the current upgrade from PreviousVersion to TargetVersion -// is possible given the configured upgrade path -func (m *UpgradeManager) verifyPath(upgradePath map[string]UpgradeExecutor) error { - - _, okP := upgradePath[m.PreviousVersion] - _, okT := upgradePath[m.TargetVersion] +func linearSearchArray(version string, versionMapArray []string) int { - if !okP && !okT { - return fmt.Errorf("previous version=%v or target version=%v not found in upgrade path", m.PreviousVersion, m.TargetVersion) - } - versionIterator := m.PreviousVersion - for versionIterator != "" { - versionIterator = upgradePath[versionIterator].NextVersion - if versionIterator == m.TargetVersion { - return nil + for i, v := range versionMapArray { + if v == version { + return i } } - return fmt.Errorf("upgrade path not found from previous version=%v to target version=%v", m.PreviousVersion, m.TargetVersion) + return -1 +} + +// traceUpgradePath traces the upgrade path between the two versions by taking in them and the map +func traceUpgradePath(previousVersion Version, targetVersion Version, getVersionMap map[string]UpgradeExecutor) []string { + versionStringMap := parseVersionMap(getVersionMap, previousVersion.getVersion(), targetVersion.getVersion()) + + startIndex := linearSearchArray(previousVersion.getVersion(), versionStringMap) + endIndex := linearSearchArray(targetVersion.getVersion(), versionStringMap) + return versionStringMap[startIndex+1 : endIndex+1] } // Run executes all the steps required in the upgrade path from PreviousVersion to TargetVersion func (m *UpgradeManager) Run() error { - upgradePath := m.getUpgradePath() + versionMap := m.getVersionMap() - // verify if upgrade possible - if err := m.verifyPath(upgradePath); err != nil { - return err - } + upgradePath := traceUpgradePath(*m.PreviousVersion, *m.TargetVersion, versionMap) + log.WithFields(log.Fields{ + "upgradePath": upgradePath, + }).Info("Sequential upgrade path to be followed") - // start upgrade from previous version to target version - versionIterator := m.PreviousVersion - // loop till the target version is reached - for versionIterator != m.TargetVersion { - // Skipping schema upgrade, if version manager not available (Only version will be upgraded) - if upgradePath[versionIterator].VersionManager != nil { - if err := upgradePath[versionIterator].VersionManager.Run(); err != nil { - return fmt.Errorf("failed to upgrade to version %v, error : %w", versionIterator, err) + for _, v := range upgradePath { + + _, exists := versionMap[v] + if exists && versionMap[v].VersionManager != nil { + if err := versionMap[v].VersionManager.Run(); err != nil { + return fmt.Errorf("failed to upgrade to version %v, error : %w", v, err) } + database.UpdateVersion(m.DBClient, v) + log.WithFields(log.Fields{ + "version": v, + }).Info("Version upgraded to an intermediate version") } - versionIterator = upgradePath[versionIterator].NextVersion - } - - err := database.UpdateVersion(m.DBClient, m.TargetVersion) - if err != nil { - return fmt.Errorf("failed to update version in server config collection, error=%w", err) } + database.UpdateVersion(m.DBClient, upgradePath[len(upgradePath)-1]) + log.WithFields(log.Fields{ + "version": m.TargetVersion.getVersion(), + }).Info("Version upgrade successful") return nil } diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v0.0.0/manager.go b/chaoscenter/upgrade-agents/control-plane/versions/v0.0.0/manager.go new file mode 100644 index 00000000000..27009c8ce27 --- /dev/null +++ b/chaoscenter/upgrade-agents/control-plane/versions/v0.0.0/manager.go @@ -0,0 +1,45 @@ +package v0_0_0 + +import ( + "context" + + log "github.com/sirupsen/logrus" + "go.mongodb.org/mongo-driver/mongo" +) + +/* Template for Upgrade Manager to be followed for introducing new upgrade files*/ + +// VersionManager implements IVersionManger +type VersionManager struct { + Logger *log.Logger + DBClient *mongo.Client + Context *context.Context +} + +// NewVersionManger provides a new instance of a new VersionManager +func NewVersionManger(logger *log.Logger, dbClient *mongo.Client) *VersionManager { + return &VersionManager{Logger: logger, DBClient: dbClient} +} + +// Run executes all the steps required for the Version Manger +// to upgrade from the previous version to `this` version +func (vm VersionManager) Run() error { + ctx := context.Background() + err := upgradeUsersCollection(vm.Logger, vm.DBClient, ctx) + if err != nil { + return err + } + + err = upgradeEnvironmentCollectionIndexes(vm.Logger, vm.DBClient, ctx) + if err != nil { + return err + } + + err = upgradeWorkflow(vm.Logger, vm.DBClient, ctx) + + if err != nil { + return err + } + + return err +} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v0.0.0/upgrade.go b/chaoscenter/upgrade-agents/control-plane/versions/v0.0.0/upgrade.go new file mode 100644 index 00000000000..23e6078870c --- /dev/null +++ b/chaoscenter/upgrade-agents/control-plane/versions/v0.0.0/upgrade.go @@ -0,0 +1,143 @@ +package v0_0_0 + +// remove +import ( + "context" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + + "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/pkg/database" + log "github.com/sirupsen/logrus" +) + +/* This example upgrade renames auth collection users to client*/ + +func upgradeUsersCollection(logger *log.Logger, dbClient *mongo.Client, ctx context.Context) error { + + logVersion := log.Fields{ + "version": "0.0.0", + "database": database.AdminDB, + "collection": database.UsersCollection, + } + + res := dbClient.Database(database.AdminDB).RunCommand( + context.Background(), + bson.D{{"renameCollection", "auth.users"}, {"to", "auth.client"}}, + ) + if res.Err() != nil { + log.WithFields(logVersion).Fatal("Error while renaming collection 'auth.users' to 'auth.client'") + return res.Err() + } + + logger.WithFields(logVersion).Info("Users collection renamed to admin while upgrading to intermediate version v3.8.0") + + logger.WithFields(logVersion).Info("Collection 'auth.users' renamed to 'auth.client' successfully.") + + return nil +} + +func upgradeEnvironmentCollectionIndexes(logger *log.Logger, dbClient *mongo.Client, ctx context.Context) error { + var indexes []string + var environmentIDIndexName string + + environmentCollection := dbClient.Database(database.LitmusDB).Collection(database.EnvironmentCollection) + indexView := environmentCollection.Indexes() + cursor, err := indexView.List(ctx) + if err != nil { + log.Error("error listing indexes: %w", err) + return err + } + defer cursor.Close(ctx) + + environmentIDIndexExists := false + + logVersion := log.Fields{ + "version": "0.0.0", + "database": database.LitmusDB, + "collection": database.EnvironmentCollection, + } + + for cursor.Next(ctx) { + var index bson.M + if err := cursor.Decode(&index); err != nil { + log.Fatal("error decoding index: %w", err) + } + indexes = append(indexes, index["name"].(string)) + if keys, ok := index["key"].(bson.M); ok { + if _, found := keys["environment_id"]; found { + environmentIDIndexExists = true + environmentIDIndexName = index["name"].(string) + } + } + } + + logIndexes := log.Fields{ + "version": "3.4.0", + "database": database.LitmusDB, + "collection": database.EnvironmentCollection, + "indexes": indexes, + } + + logger.WithFields(logIndexes).Info("Indexes found in environment collection while upgrading to intermediate version v3.4.0") + + logFields := log.Fields{ + "collection": database.EnvironmentCollection, + "db": database.LitmusDB, + } + + if environmentIDIndexExists { + _, err := environmentCollection.Indexes().DropOne(ctx, environmentIDIndexName) + if err != nil { + log.Fatal("error dropping index: %w", err) + } + logger.WithFields(logFields).Info("Deleted an existing index in environment collection while upgrading to intermediate v3.4.0") + + indexModel := mongo.IndexModel{ + Keys: bson.M{"environment_id": 1}, + Options: options.Index(). + SetUnique(true). + SetPartialFilterExpression(bson.D{ + {"isRemoved", false}, + }), + } + + _, err = environmentCollection.Indexes().CreateOne(ctx, indexModel) + if err != nil { + log.Fatal("error creating index: %w", err) + } + + log.WithFields(logVersion).Info("Created a new index with partial filter expression environment_id while upgrading to intermediate v3.4.0") + + } else { + log.Fatal("environment id index not found in version v3.4.0") + } + + return nil +} + +func upgradeWorkflow(logger *log.Logger, dbClient *mongo.Client, ctx context.Context) error { + workflowCollection := dbClient.Database("litmus").Collection("workflow-collection") + + logVersion := log.Fields{ + "version": "0.0.0", + "database": database.LitmusDB, + "collection": database.WorkflowCollection, + } + + //delete the existing workflow_name index + _, err := workflowCollection.Indexes().DropOne(context.Background(), "workflow_name_1") + if err != nil { + logger.WithFields(logVersion).Fatal("Error while dropping workflow") + } + + //create a new workflow index with partial filter expression + _, err = workflowCollection.Indexes().CreateOne(context.Background(), + mongo.IndexModel{Keys: bson.M{"workflow_name": 1}, + Options: options.Index().SetUnique(true).SetPartialFilterExpression(bson.D{{ + "isRemoved", false, + }})}) + + return err +} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v2.4.0/auth.go b/chaoscenter/upgrade-agents/control-plane/versions/v2.4.0/auth.go deleted file mode 100644 index df30b0a8bb8..00000000000 --- a/chaoscenter/upgrade-agents/control-plane/versions/v2.4.0/auth.go +++ /dev/null @@ -1,62 +0,0 @@ -package v2_4_0 - -import ( - "context" - "fmt" - - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/mongo" - "go.uber.org/zap" -) - -// upgradeAuthDb: migrates project collection from litmus-db to auth-db, renames usercredentials collection to users" -func upgradeAuthDb(logger *zap.Logger, dbClient *mongo.Client) error { - - // migration of project collection to auth DB - projectLitmusCollection := dbClient.Database("litmus").Collection("project") //project collection from litmus DB - userLitmusCollection := dbClient.Database("litmus").Collection("user") // user collection from litmus DB - usersAuthCollection := dbClient.Database("auth").Collection("users") // users collection from auth DB - authDBProjectCollection := dbClient.Database("auth").Collection("project") // project collected in auth DB - - // fetching the projects from project collection in litmus DB - cursor, err := projectLitmusCollection.Find(context.Background(), bson.M{}) - if err != nil { - fmt.Errorf("Error in getting project collection: %w", err) - } - - var result []interface{} - if err := cursor.All(context.Background(), &result); err != nil { - fmt.Errorf("Error: %w", err) - } - - // inserting the project documents in project collection(auth DB) - _, err = authDBProjectCollection.InsertMany(context.TODO(), result) - if err != nil { - fmt.Errorf("Error: %w", err) - } - - // deleting project collection in litmus DB - err = projectLitmusCollection.Drop(context.Background()) - if err != nil { - fmt.Errorf("Error: %w", err) - } - - // deleting user collection in litmus DB - err = userLitmusCollection.Drop(context.Background()) - if err != nil { - fmt.Errorf("Error: %w", err) - } - - // deleting users collection in auth DB - err = usersAuthCollection.Drop(context.Background()) - if err != nil { - fmt.Errorf("Error: %w", err) - } - - // renaming usercredentials collection to users - res := dbClient.Database("admin").RunCommand(context.Background(), bson.D{{"renameCollection", "auth.usercredentials"}, {"to", "auth.users"}}) - if res.Err() != nil { - return res.Err() - } - return err -} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v2.4.0/manager.go b/chaoscenter/upgrade-agents/control-plane/versions/v2.4.0/manager.go deleted file mode 100644 index 9794896f752..00000000000 --- a/chaoscenter/upgrade-agents/control-plane/versions/v2.4.0/manager.go +++ /dev/null @@ -1,27 +0,0 @@ -package v2_4_0 - -import ( - "go.mongodb.org/mongo-driver/mongo" - "go.uber.org/zap" -) - -// VersionManager implements IVersionManger -type VersionManager struct { - Logger *zap.Logger - DBClient *mongo.Client -} - -// NewVersionManger provides a new instance of a new VersionManager -func NewVersionManger(logger *zap.Logger, dbClient *mongo.Client) *VersionManager { - return &VersionManager{Logger: logger, DBClient: dbClient} -} - -// Run executes all the steps required for the Version Manger -// to upgrade from the previous version to `this` version -func (vm VersionManager) Run() error { - if err := upgradeAuthDb(vm.Logger, vm.DBClient); err != nil { - return err - } - // other upgrade step ..... - return nil -} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v2.6.0/manager.go b/chaoscenter/upgrade-agents/control-plane/versions/v2.6.0/manager.go deleted file mode 100644 index 20ac2ae396e..00000000000 --- a/chaoscenter/upgrade-agents/control-plane/versions/v2.6.0/manager.go +++ /dev/null @@ -1,31 +0,0 @@ -package v2_6_0 - -import ( - "context" - "fmt" - - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" - "go.uber.org/zap" -) - -// upgradeWorkflowCollection updated the index related changes in workflow-collection -func upgradeWorkflowCollection(logger *zap.Logger, dbClient *mongo.Client) error { - workflowCollection := dbClient.Database("litmus").Collection("workflow-collection") - - //delete the existing workflow_name index - _, err := workflowCollection.Indexes().DropOne(context.Background(), "workflow_name_1") - if err != nil { - fmt.Errorf("error: %w", err) - } - - //create a new workflow index with partial filter expression - _, err = workflowCollection.Indexes().CreateOne(context.Background(), - mongo.IndexModel{Keys: bson.M{"workflow_name": 1}, - Options: options.Index().SetUnique(true).SetPartialFilterExpression(bson.D{{ - "isRemoved", false, - }})}) - - return err -} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v2.6.0/workflow.go b/chaoscenter/upgrade-agents/control-plane/versions/v2.6.0/workflow.go deleted file mode 100644 index 3db30f689af..00000000000 --- a/chaoscenter/upgrade-agents/control-plane/versions/v2.6.0/workflow.go +++ /dev/null @@ -1,26 +0,0 @@ -package v2_6_0 - -import ( - "go.mongodb.org/mongo-driver/mongo" - "go.uber.org/zap" -) - -// VersionManager implements IVersionManger -type VersionManager struct { - Logger *zap.Logger - DBClient *mongo.Client -} - -// NewVersionManger provides a new instance of a new VersionManager -func NewVersionManger(logger *zap.Logger, dbClient *mongo.Client) *VersionManager { - return &VersionManager{Logger: logger, DBClient: dbClient} -} - -// Run executes all the steps required for the Version Manger -// to upgrade from the previous version to `this` version -func (vm VersionManager) Run() error { - if err := upgradeWorkflowCollection(vm.Logger, vm.DBClient); err != nil { - return nil - } - return nil -} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v3.9.0/manager.go b/chaoscenter/upgrade-agents/control-plane/versions/v3.9.0/manager.go new file mode 100644 index 00000000000..0ba5ccddfc9 --- /dev/null +++ b/chaoscenter/upgrade-agents/control-plane/versions/v3.9.0/manager.go @@ -0,0 +1,75 @@ +package v3_9_0 + +import ( + "context" + + "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/pkg/database" + log "github.com/sirupsen/logrus" + "go.mongodb.org/mongo-driver/mongo" +) + +// VersionManager implements IVersionManger +type VersionManager struct { + Logger *log.Logger + DBClient *mongo.Client + Context *context.Context +} + +// NewVersionManger provides a new instance of a new VersionManager +func NewVersionManger(logger *log.Logger, dbClient *mongo.Client) *VersionManager { + return &VersionManager{Logger: logger, DBClient: dbClient} +} + +// Run executes all the steps required for the Version Manger +// to upgrade from the previous version to `this` version +func (vm VersionManager) Run() error { + ctx := context.Background() + session, err := vm.DBClient.StartSession() + + defer session.EndSession(ctx) + + logVersion := log.Fields{ + "version": "3.9.0", + "database": database.LitmusDB, + "collection": database.ProjectCollection, + } + + if err != nil { + // log.Fatal(logVersion, err) + log.WithFields(logVersion).Fatal("Error while starting session") + } + + defer session.EndSession(ctx) + + err = mongo.WithSession(ctx, session, func(sc mongo.SessionContext) error { + // Start the transaction + err := session.StartTransaction() + if err != nil { + log.Fatal("error starting transaction: %w", err) + } + + if err := upgradeProjectCollection(vm.Logger, vm.DBClient, sc); err != nil { + return err + } + + if err := upgradeUsersCollection(vm.Logger, vm.DBClient, sc); err != nil { + return err + } + // Commit the transaction + err = session.CommitTransaction(sc) + + if err != nil { + return err + } + + return nil + }) + if err != nil { + // Abort the transaction if it fails + abortError := session.AbortTransaction(ctx) + if abortError != nil { + log.Fatal("error committing transaction: %w", err) + } + } + return err +} diff --git a/chaoscenter/upgrade-agents/control-plane/versions/v3.9.0/upgrade.go b/chaoscenter/upgrade-agents/control-plane/versions/v3.9.0/upgrade.go new file mode 100644 index 00000000000..9e5abf8f3ee --- /dev/null +++ b/chaoscenter/upgrade-agents/control-plane/versions/v3.9.0/upgrade.go @@ -0,0 +1,89 @@ +package v3_9_0 + +import ( + "context" + + "github.com/litmuschaos/litmus/chaoscenter/upgrader-agents/control-plane/pkg/database" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + + log "github.com/sirupsen/logrus" +) + +const ( + oldRole = "Editor" + newRole = "Executor" +) + +func upgradeProjectCollection(logger *log.Logger, dbClient *mongo.Client, ctx context.Context) error { + + var err error + collection := dbClient.Database(database.AuthDB).Collection(database.ProjectCollection) + + // Update the role from Editor to Executor + filter := bson.M{"members.role": oldRole} + update := bson.M{ + "$set": bson.M{"members.$[elem].role": newRole}, + } + arrayFilters := options.Update().SetArrayFilters(options.ArrayFilters{ + Filters: []interface{}{ + bson.M{"elem.role": oldRole}, + }, + }) + + logFields := log.Fields{ + "version": "3.9.0", + "database": database.AuthDB, + "collection": database.ProjectCollection, + } + logger.WithFields(logFields).Info("Updating editor to executor") + updateResult, err := collection.UpdateMany(ctx, filter, update, arrayFilters) + if err != nil { + logger.WithFields(logFields).Fatal("Error while updating documents in version v3.9.0") + return err + } + + logUpdateDocuments := log.Fields{ + "documents_matched": updateResult.MatchedCount, + "documents_updated": updateResult.ModifiedCount, + "version": "3.9.0", + } + + logger.WithFields(logUpdateDocuments).Infof("Matched %v documents and updated %v documents in project collection", updateResult.MatchedCount, updateResult.ModifiedCount) + + return nil + +} + +func upgradeUsersCollection(logger *log.Logger, dbClient *mongo.Client, ctx context.Context) error { + usersCollection := dbClient.Database(database.AuthDB).Collection(database.UsersCollection) + + logFields := log.Fields{ + "version": "3.9.0", + "database": database.AuthDB, + "collection": database.UsersCollection, + } + + logger.WithFields(logFields).Info("Adding is_initial_login field") + + // Add the new field is_initial_lgin to all documents in Users Collection + filter := bson.M{} + update := bson.M{ + "$set": bson.M{"is_initial_login": false}, + } + + updateResult, err := usersCollection.UpdateMany(ctx, filter, update) + if err != nil { + logger.WithFields(logFields).Fatal("Error while updating documents in version v3.9.0: ", err) + return err + } + logDocumentsCount := log.Fields{ + "documents_matched": updateResult.MatchedCount, + "documents_updated": updateResult.ModifiedCount, + "version": "3.9.0", + } + + logger.WithFields(logDocumentsCount).Infof("Matched %v documents and updated %v documents in users collection.", updateResult.MatchedCount, updateResult.ModifiedCount) + return nil +} 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 diff --git a/chaoscenter/web/Dockerfile b/chaoscenter/web/Dockerfile index 3c4c117f211..616d4e608a3 100644 --- a/chaoscenter/web/Dockerfile +++ b/chaoscenter/web/Dockerfile @@ -1,4 +1,4 @@ -FROM registry.access.redhat.com/ubi8/ubi-minimal:8.8 +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10 RUN microdnf module enable nginx:1.20 RUN microdnf install nginx RUN microdnf update --refresh --best --noplugins --setopt=install_weak_deps=0 diff --git a/chaoscenter/web/src/api/core/chaoshubs/addChaosHub.ts b/chaoscenter/web/src/api/core/chaoshubs/addChaosHub.ts index 74a8a6d2e75..c6c36465335 100644 --- a/chaoscenter/web/src/api/core/chaoshubs/addChaosHub.ts +++ b/chaoscenter/web/src/api/core/chaoshubs/addChaosHub.ts @@ -8,6 +8,7 @@ export interface CreateChaosHubRequest { description?: string; repoURL: string; repoBranch: string; + remoteHub: string; isPrivate: boolean; authType: AuthType; token?: string; @@ -36,6 +37,7 @@ export function addChaosHub( name repoURL repoBranch + remoteHub hubType isPrivate } diff --git a/chaoscenter/web/src/api/core/chaoshubs/listChaosHub.ts b/chaoscenter/web/src/api/core/chaoshubs/listChaosHub.ts index 904adb08910..a66ed07f41c 100644 --- a/chaoscenter/web/src/api/core/chaoshubs/listChaosHub.ts +++ b/chaoscenter/web/src/api/core/chaoshubs/listChaosHub.ts @@ -34,6 +34,7 @@ export function listChaosHub({ id repoURL repoBranch + remoteHub authType isAvailable totalFaults diff --git a/chaoscenter/web/src/api/core/chaoshubs/updateChaosHub.ts b/chaoscenter/web/src/api/core/chaoshubs/updateChaosHub.ts index 37015347f56..3c9fdbea6da 100644 --- a/chaoscenter/web/src/api/core/chaoshubs/updateChaosHub.ts +++ b/chaoscenter/web/src/api/core/chaoshubs/updateChaosHub.ts @@ -8,6 +8,7 @@ interface EditChaosHubRequest { tags: string[]; description?: string; repoURL: string; + remoteHub: string; repoBranch: string; isPrivate: boolean; authType: AuthType; @@ -37,6 +38,7 @@ export function updateChaosHub( name repoURL repoBranch + remoteHub } } `, diff --git a/chaoscenter/web/src/api/core/infrastructures/getKubeObject.ts b/chaoscenter/web/src/api/core/infrastructures/getKubeObject.ts index b3129ae1dff..54deef519fc 100644 --- a/chaoscenter/web/src/api/core/infrastructures/getKubeObject.ts +++ b/chaoscenter/web/src/api/core/infrastructures/getKubeObject.ts @@ -12,13 +12,14 @@ export interface KubeObjRequest { infraID: string; objectType: string; kubeObjRequest?: KubeGVRRequest; + namespace: string; }; } export interface KubeObjResponse { getKubeObject: { infraID: string; - kubeObj: Array; + kubeObj: KubeObj; }; } @@ -32,13 +33,30 @@ interface KubeObjData { name: string; } -export function kubeObjectSubscription({ +interface KubeNamespace { + name: string; +} + +export interface KubeNamespaceRequest { + request: { + infraID: string; + }; +} + +export interface KubeNamespaceResponse { + getKubeNamespace: { + infraID: string; + kubeNamespace: Array; + }; +} + +export const kubeObjectSubscription = ({ request, ...options }: GqlAPISubscriptionRequest): GqlAPISubscriptionResponse< KubeObjResponse, KubeObjRequest -> { +> => { const { data, loading, error } = useSubscription( gql` subscription getKubeObject($request: KubeObjectRequest!) { @@ -59,6 +77,7 @@ export function kubeObjectSubscription({ request: { infraID: request.infraID, kubeObjRequest: request.kubeObjRequest, + namespace: request.namespace, objectType: request.objectType } }, @@ -67,4 +86,35 @@ export function kubeObjectSubscription({ ); return { data, loading, error }; -} +}; + +export const kubeNamespaceSubscription = ({ + request, + ...options +}: GqlAPISubscriptionRequest): GqlAPISubscriptionResponse< + KubeNamespaceResponse, + KubeNamespaceRequest +> => { + const { data, loading, error } = useSubscription( + gql` + subscription getKubeNamespace($request: KubeNamespaceRequest!) { + getKubeNamespace(request: $request) { + infraID + kubeNamespace { + name + } + } + } + `, + { + variables: { + request: { + infraID: request.infraID + } + }, + ...options + } + ); + + return { data, loading, error }; +}; diff --git a/chaoscenter/web/src/api/entities/chaoshub.ts b/chaoscenter/web/src/api/entities/chaoshub.ts index 0a566de63b2..c06450bfe93 100644 --- a/chaoscenter/web/src/api/entities/chaoshub.ts +++ b/chaoscenter/web/src/api/entities/chaoshub.ts @@ -27,6 +27,7 @@ export interface ChaosHub extends Audit, ResourceDetails { id: string; repoURL: string; repoBranch: string; + remoteHub: string; projectID: string; name: string; tags?: [string]; diff --git a/chaoscenter/web/src/api/entities/environment.ts b/chaoscenter/web/src/api/entities/environment.ts index 7341b84f50e..86fd89b41cf 100644 --- a/chaoscenter/web/src/api/entities/environment.ts +++ b/chaoscenter/web/src/api/entities/environment.ts @@ -23,3 +23,9 @@ export interface EnvironmentSortInput { field: SortType; ascending: boolean; } + +export interface EnvironmentDetail { + envName: string; + envID: string; + totalInfra?: number | null; +} diff --git a/chaoscenter/web/src/constants/validation.ts b/chaoscenter/web/src/constants/validation.ts index 39d68029c28..a03d51e26f5 100644 --- a/chaoscenter/web/src/constants/validation.ts +++ b/chaoscenter/web/src/constants/validation.ts @@ -6,7 +6,7 @@ export const USERNAME_REGEX = /^[a-zA-Z][a-zA-Z0-9_-]{2,15}$/; // ^(?=.*[a-z]) # At least one lowercase letter // (?=.*[A-Z]) # At least one uppercase letter // (?=.*\d) # At least one digit -// (?=.*[@$!%*?_&]) # At least one special character @$!%*?_& -// [A-Za-z\d@$!%*?_&] # Allowed characters: letters, digits, special characters @$!%*?_& +// (?=.*[@$!%*?_&#]) # At least one special character @$!%*?_&# +// [A-Za-z\d@$!%*?_&#] # Allowed characters: letters, digits, special characters @$!%*?_&# // {8,16}$ # Length between 8 to 16 characters -export const PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?_&])[A-Za-z\d@$!%*?_&]{8,16}$/; +export const PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?_&#])[A-Za-z\d@$!%*?_&#]{8,16}$/; diff --git a/chaoscenter/web/src/controllers/Environments/Environment.tsx b/chaoscenter/web/src/controllers/Environments/Environment.tsx index 2abb02dfd08..3303ec29d48 100644 --- a/chaoscenter/web/src/controllers/Environments/Environment.tsx +++ b/chaoscenter/web/src/controllers/Environments/Environment.tsx @@ -64,8 +64,9 @@ const EnvironmentController: React.FC = () => { itemCount: totalEnvironments ?? 0, pageCount: totalEnvironments ? Math.ceil(totalEnvironments / limit) : 1, pageIndex: page, - pageSizeOptions: [...new Set([15, 30, limit])].sort(), + pageSizeOptions: [...new Set([5, 10, 15, 30, limit])].sort(), pageSize: limit, + showPagination: true, onPageSizeChange: event => setLimit(event) } }; diff --git a/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureReferenceField/KubernetesChaosInfrastructureReferenceField.tsx b/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureReferenceField/KubernetesChaosInfrastructureReferenceField.tsx index f7fe8c48d04..e4702f2d01f 100644 --- a/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureReferenceField/KubernetesChaosInfrastructureReferenceField.tsx +++ b/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureReferenceField/KubernetesChaosInfrastructureReferenceField.tsx @@ -3,31 +3,55 @@ import React from 'react'; import { listChaosInfra } from '@api/core'; import { getScope } from '@utils'; import ChaosInfrastructureReferenceFieldView from '@views/ChaosInfrastructureReferenceField'; -import type { ChaosInfrastructureReferenceFieldProps } from '@models'; +import { AllEnv, type ChaosInfrastructureReferenceFieldProps } from '@models'; import type { InfrastructureDetails } from '@views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField'; +import { listEnvironment } from '@api/core/environments'; function KubernetesChaosInfrastructureReferenceFieldController({ setFieldValue, - initialInfrastructureID + initialInfrastructureID, + initialEnvironmentID }: ChaosInfrastructureReferenceFieldProps): React.ReactElement { const scope = getScope(); const { showError } = useToaster(); const [searchInfrastructure, setSearchInfrastructure] = React.useState(''); - const [page, setPage] = React.useState(0); - const limit = 8; + const [limit, setLimit] = React.useState(5); + const [envID, setEnvID] = React.useState(AllEnv.AllEnv); + const [initialAllInfrastructureLength, setInitialAllInfrastructureLength] = React.useState(0); const { data: listChaosInfraData, loading: listChaosInfraLoading } = listChaosInfra({ ...scope, - filter: { name: searchInfrastructure, isActive: true }, + environmentIDs: envID === AllEnv.AllEnv ? undefined : [envID], + filter: { name: searchInfrastructure }, pagination: { page, limit }, options: { onError: error => showError(error.message) } }); + const { data: listEnvironmentData } = listEnvironment({ + ...scope, + options: { + onError: err => showError(err.message) + } + }); + + const environmentList = listEnvironmentData?.listEnvironments?.environments; + + React.useEffect(() => { + if (envID === AllEnv.AllEnv) { + setInitialAllInfrastructureLength(listChaosInfraData?.listInfras.totalNoOfInfras || 0); + } + }, [listChaosInfraData]); + + const preSelectedEnvironment = listEnvironmentData?.listEnvironments?.environments?.find( + ({ environmentID }) => environmentID === initialEnvironmentID + ); + // TODO: replace with get API as this becomes empty during edit const preSelectedInfrastructure = listChaosInfraData?.listInfras.infras.find( ({ infraID }) => infraID === initialInfrastructureID ); + const preSelectedInfrastructureDetails: InfrastructureDetails | undefined = preSelectedInfrastructure && { id: preSelectedInfrastructure?.infraID, name: preSelectedInfrastructure?.name, @@ -38,6 +62,16 @@ function KubernetesChaosInfrastructureReferenceFieldController({ environmentID: preSelectedInfrastructure?.environmentID }; + React.useEffect(() => { + setPage(0); + }, [envID]); + + React.useEffect(() => { + if (preSelectedEnvironment) { + setEnvID(preSelectedEnvironment?.environmentID); + } + }, [preSelectedEnvironment, setFieldValue]); + React.useEffect(() => { if (preSelectedInfrastructure) { setFieldValue('chaosInfrastructure.id', preSelectedInfrastructure.infraID, true); @@ -69,7 +103,10 @@ function KubernetesChaosInfrastructureReferenceFieldController({ pageSize={limit} pageCount={Math.ceil(totalNoOfInfras / limit)} pageIndex={page} - gotoPage={pageNumber => setPage(pageNumber)} + gotoPage={setPage} + showPagination={true} + pageSizeOptions={[5, 10, 15]} + onPageSizeChange={setLimit} /> ); }; @@ -87,6 +124,10 @@ function KubernetesChaosInfrastructureReferenceFieldController({ }} searchInfrastructure={searchInfrastructure} setSearchInfrastructure={setSearchInfrastructure} + allInfrastructureLength={initialAllInfrastructureLength} + environmentList={environmentList} + envID={envID} + setEnvID={setEnvID} loading={{ listChaosInfra: listChaosInfraLoading }} diff --git a/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureUpgrade/KubernetesChaosInfrastructureUpgrade.tsx b/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureUpgrade/KubernetesChaosInfrastructureUpgrade.tsx index 310f47cd602..6c3dad53c68 100644 --- a/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureUpgrade/KubernetesChaosInfrastructureUpgrade.tsx +++ b/chaoscenter/web/src/controllers/KubernetesChaosInfrastructureUpgrade/KubernetesChaosInfrastructureUpgrade.tsx @@ -22,7 +22,7 @@ export default function KubernetesChaosInfrastructureUpgradeController({ ...scope, options: { skip: !isUpgradeAvailable, - onError: err => showError(err) + onError: err => showError(err.message) } }); diff --git a/chaoscenter/web/src/controllers/TargetApplicationTab/TargetApplicationTab.tsx b/chaoscenter/web/src/controllers/TargetApplicationTab/TargetApplicationTab.tsx index bf7089b2add..059482d2e3b 100644 --- a/chaoscenter/web/src/controllers/TargetApplicationTab/TargetApplicationTab.tsx +++ b/chaoscenter/web/src/controllers/TargetApplicationTab/TargetApplicationTab.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { KubeGVRRequest, kubeObjectSubscription } from '@api/core'; +import { KubeGVRRequest, kubeObjectSubscription, kubeNamespaceSubscription } from '@api/core'; import type { ChaosEngine, FaultData } from '@models'; import { TargetApplicationTab } from '@views/ExperimentCreationFaultConfiguration/Tabs'; import type { AppInfoData, TargetApplicationData } from './types'; @@ -16,17 +16,26 @@ export default function TargetApplicationTabController({ infrastructureID, setFaultData }: TargetApplicationControllerProps): React.ReactElement { - const [appInfoData, setAppInfoData] = React.useState([]); + const [namespaceData, setNamespaceData] = React.useState([]); + const [appInfoData, setAppInfoData] = React.useState({ appLabel: [] }); const [targetApp, setTargetApp] = React.useState({ ...engineCR?.spec?.appinfo }); const [selectedGVR, setSelectedGVR] = React.useState(); - const { data: result, loading } = kubeObjectSubscription({ + const { data: resultNamespace, loading: loadingNamespace } = kubeNamespaceSubscription({ + request: { + infraID: infrastructureID ?? '' + }, + shouldResubscribe: true, + skip: targetApp?.appkind === undefined || selectedGVR === undefined + }); + const { data: resultObject, loading: loadingObject } = kubeObjectSubscription({ shouldResubscribe: true, - skip: targetApp?.appkind === undefined || selectedGVR === undefined, + skip: targetApp?.appns === undefined || targetApp?.appns === '', request: { infraID: infrastructureID ?? '', kubeObjRequest: selectedGVR, + namespace: targetApp?.appns ?? '', objectType: 'kubeobject' } }); @@ -37,51 +46,44 @@ export default function TargetApplicationTabController({ if (data.resource === targetApp?.appkind) { setSelectedGVR({ group: data.group, - version: data.version, - resource: `${data.resource}s` + resource: `${data.resource}s`, + version: data.version }); } }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [targetApp?.appkind]); - /** - * UseEffect to filter the labels according to the namespace provided - * Required to populate the appLabels dropdown - */ React.useEffect(() => { - if (result?.getKubeObject) { - const appInfo: AppInfoData[] = []; - const kubeData = result.getKubeObject.kubeObj; - kubeData.forEach(obj => { - const applabels: string[] = []; - obj.data.forEach(objData => { - if (objData.labels) { - applabels.push(...objData.labels.filter(() => obj.namespace === targetApp?.appns)); - } - }); - /** - * Push these labels corresponding to their namespaces - */ - appInfo.push({ - namespace: obj.namespace, - appLabel: applabels - }); - }); + if (resultNamespace?.getKubeNamespace) { + setNamespaceData(resultNamespace.getKubeNamespace.kubeNamespace.map(data => data.name)); + } + }, [resultNamespace?.getKubeNamespace, targetApp?.appkind]); + React.useEffect(() => { + if (resultObject?.getKubeObject) { + const applabels: string[] = []; + resultObject.getKubeObject.kubeObj.data.forEach(objData => { + if (objData.labels) { + applabels.push(...objData.labels); + } + }); + const appInfo: AppInfoData = { appLabel: applabels }; setAppInfoData(appInfo); } - }, [result?.getKubeObject, targetApp?.appns]); + }, [resultObject?.getKubeObject, targetApp?.appns]); return ( ); } diff --git a/chaoscenter/web/src/controllers/TargetApplicationTab/types.ts b/chaoscenter/web/src/controllers/TargetApplicationTab/types.ts index 85f3123fefc..3fd0c0819a8 100644 --- a/chaoscenter/web/src/controllers/TargetApplicationTab/types.ts +++ b/chaoscenter/web/src/controllers/TargetApplicationTab/types.ts @@ -4,7 +4,10 @@ export interface TargetApplicationData { applabel?: string; } +export interface NamespaceData { + namespace: string[]; +} + export interface AppInfoData { - namespace: string; appLabel: string[]; } diff --git a/chaoscenter/web/src/images/Azure.svg b/chaoscenter/web/src/images/Azure.svg new file mode 100644 index 00000000000..624ef6d0f4d --- /dev/null +++ b/chaoscenter/web/src/images/Azure.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/chaoscenter/web/src/images/Bitbucket.svg b/chaoscenter/web/src/images/Bitbucket.svg new file mode 100644 index 00000000000..883910e4e35 --- /dev/null +++ b/chaoscenter/web/src/images/Bitbucket.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/chaoscenter/web/src/images/Github.svg b/chaoscenter/web/src/images/Github.svg new file mode 100644 index 00000000000..5d6072823c4 --- /dev/null +++ b/chaoscenter/web/src/images/Github.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/chaoscenter/web/src/images/Gitlab.svg b/chaoscenter/web/src/images/Gitlab.svg new file mode 100644 index 00000000000..e8d408fa2ed --- /dev/null +++ b/chaoscenter/web/src/images/Gitlab.svg @@ -0,0 +1,53 @@ + + + + logo-square + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/chaoscenter/web/src/models/chaosInfrastructure.ts b/chaoscenter/web/src/models/chaosInfrastructure.ts index cc9d530c7aa..ab40a98aa76 100644 --- a/chaoscenter/web/src/models/chaosInfrastructure.ts +++ b/chaoscenter/web/src/models/chaosInfrastructure.ts @@ -31,6 +31,7 @@ export function getChaosInfrastructureStatus( export interface ChaosInfrastructureReferenceFieldProps { setFieldValue: FormikHelpers['setFieldValue']; initialInfrastructureID: string | undefined; + initialEnvironmentID: string | undefined; } export enum DeploymentScopeOptions { @@ -64,6 +65,10 @@ export interface InitialValueProps { tolerationValues?: Array; } +export enum AllEnv { + AllEnv = 'All' +} + export interface DeploymentScopeItem extends CollapsableSelectOptions { type: DeploymentScopeOptions; name: string; diff --git a/chaoscenter/web/src/strings/strings.en.yaml b/chaoscenter/web/src/strings/strings.en.yaml index bfe16f64f61..408481c31cc 100644 --- a/chaoscenter/web/src/strings/strings.en.yaml +++ b/chaoscenter/web/src/strings/strings.en.yaml @@ -486,6 +486,7 @@ infrastructureRegistered: >- Environment -> Infrastructure list. infrastructureStates: Learn more about the states of Infrastructure infrastructureType: Infrastructure type +infrastructures: Infrastructures initialDelay: Initial Delay initialDelaySeconds: Initial Delay Seconds insecureSkipVerify: Insecure skip verify @@ -908,6 +909,7 @@ referencedBy: Referenced By registry: Registry registryName: Registry Name registryType: Registry Type +remoteHub: Select Remote hub remoteRepo: Remote Repository remove: Remove removeMember: Remove Member diff --git a/chaoscenter/web/src/strings/types.ts b/chaoscenter/web/src/strings/types.ts index 5d0470c5945..fcfe83225f0 100644 --- a/chaoscenter/web/src/strings/types.ts +++ b/chaoscenter/web/src/strings/types.ts @@ -409,6 +409,7 @@ export interface StringsMap { 'infrastructureRegistered': unknown 'infrastructureStates': unknown 'infrastructureType': unknown + 'infrastructures': unknown 'initialDelay': unknown 'initialDelaySeconds': unknown 'insecureSkipVerify': unknown @@ -752,6 +753,7 @@ export interface StringsMap { 'registry': unknown 'registryName': unknown 'registryType': unknown + 'remoteHub': unknown 'remoteRepo': unknown 'remove': unknown 'removeMember': unknown diff --git a/chaoscenter/web/src/views/AddHubModalWizard/AddHubModalWizard.tsx b/chaoscenter/web/src/views/AddHubModalWizard/AddHubModalWizard.tsx index a5f1c29ac37..06f50055bef 100644 --- a/chaoscenter/web/src/views/AddHubModalWizard/AddHubModalWizard.tsx +++ b/chaoscenter/web/src/views/AddHubModalWizard/AddHubModalWizard.tsx @@ -51,6 +51,7 @@ interface AddHubFormData { sshPublicKey?: string; sshPrivateKey?: string; token?: string; + remoteHub: string; } interface StepData { value?: AddHubFormData; @@ -78,7 +79,8 @@ export const initialValues: AddHubFormData = { repoBranch: '', repoURL: '', isPrivate: false, - authType: AuthType.NONE + authType: AuthType.NONE, + remoteHub: '' }; const OverviewStep: React.FC> = props => { @@ -160,6 +162,7 @@ const GitConnectionStep: React.FC< // name: values.name, isPrivate: values.isPrivate, repoURL: values.repoURL, + remoteHub: values.remoteHub, authType: values.authType, token: values.token, sshPublicKey: values.sshPublicKey, @@ -174,6 +177,7 @@ const GitConnectionStep: React.FC< description: formData.description, tags: formData.tags, repoURL: values.repoURL, + remoteHub: values.remoteHub, authType: values.authType, isPrivate: values.isPrivate, token: values.token, @@ -188,7 +192,8 @@ const GitConnectionStep: React.FC< }} validationSchema={Yup.object().shape({ repoBranch: Yup.string().trim().required('Hub Branch name is a required field'), - repoURL: Yup.string().trim().required('Hub Repo name is a required field') + repoURL: Yup.string().trim().required('Hub Repo name is a required field'), + remoteHub: Yup.string().trim().required('Remote Hub name is a required field') })} > {formikProps => { @@ -231,6 +236,22 @@ const GitConnectionStep: React.FC< placeholder={getString('enterHubRepositoryBranch')} /> + Remote Hub} + placeholder={getString('remoteHub')} + items={[ + { label: 'GitHub', value: 'GitHub' }, + { label: 'Bitbucket', value: 'Bitbucket' }, + { label: 'Azure Repo', value: 'Azure Repo' }, + { label: 'GitLab', value: 'GitLab' }, + { label: 'Others', value: 'Others' } + ]} + onChange={item => { + formikProps.setFieldValue('remoteHub', item.value); + }} + /> + {formikProps.values.isPrivate && ( { name: 'Test Hub', isDefault: false, repoURL: '', + remoteHub: '', repoBranch: '', projectID: '', authType: AuthType.SSH, diff --git a/chaoscenter/web/src/views/ChaosHubs/ChaosHubs.tsx b/chaoscenter/web/src/views/ChaosHubs/ChaosHubs.tsx index 298c5ddb26e..19bc0732c47 100644 --- a/chaoscenter/web/src/views/ChaosHubs/ChaosHubs.tsx +++ b/chaoscenter/web/src/views/ChaosHubs/ChaosHubs.tsx @@ -14,8 +14,12 @@ import type { ListChaosHubRequest, ListChaosHubResponse, SyncChaosHubRequest, Sy import CustomTagsPopover from '@components/CustomTagsPopover'; import { useDocumentTitle, useRouteWithBaseUrl } from '@hooks'; import NoFilteredData from '@components/NoFilteredData'; +import GitHub from '@images/Github.svg'; +import Azure from '@images/Azure.svg'; +import Gitlab from '@images/Gitlab.svg'; import enterpriseHubLogo from '../../images/enterpriseHub.svg'; import privateHubLogo from '../../images/privateHub.svg'; +import Bitbucket from '../../images/Bitbucket.svg'; import { AddHubModalProvider } from './AddHubModal'; import css from './ChaosHubs.module.scss'; @@ -48,6 +52,25 @@ function ConnectionStatus({ isConnected }: { isConnected: boolean }): React.Reac ); } +const RemoteHubImage = ({ remoteHubName }: { remoteHubName: string }): React.ReactElement => { + const hubSvg = () => { + switch (remoteHubName) { + case 'GitHub': + return GitHub; + case 'Azure Repo': + return Azure-Repo; + case 'Bitbucket': + return Bitbucket; + case 'GitLab': + return Gitlab; + default: + return Private Hub; + } + }; + + return hubSvg(); +}; + export const ChaosHubsView: React.FC = ({ chaosHubs, loading, @@ -132,7 +155,7 @@ export const ChaosHubsView: React.FC = ({ {chaosHub.isDefault ? ( Enterprise Hub ) : ( - Private Hub + )} svg { > path { stroke-width: 1; - stroke: var(--grey-500); + stroke: var(--grey-100); + } + } + } + .iconCheck:hover { + > svg { + > path { + stroke-width: 1; + stroke: var(--green-500); } } } @@ -134,7 +139,7 @@ .gitInfo { display: grid; grid-template-columns: 4fr 5fr; - padding: 6px 8px; + padding: 4px 8px; background: var(--grey-100) !important; border-radius: 8px !important; width: 100%; @@ -170,11 +175,6 @@ position: fixed; } -.gap-4 { - gap: 1rem; - overflow: auto; -} - .paginationContainer { padding-top: 8px; overflow: hidden; @@ -190,3 +190,37 @@ } } } + +.listEnvContainer { + background: var(--primary-1); + box-shadow: 0px 0px 1px rgba(40, 41, 61, 0.04), 0px 2px 4px rgba(96, 97, 112, 0.16); + border-radius: 8px; + cursor: pointer; +} + +.itemEnv { + width: 100%; + display: grid; + grid-template-columns: 1fr 25px; + align-items: center; + gap: 0.5rem; +} + +.activeEnv { + border: 1px solid var(--primary-7); +} + +.center { + display: flex; + flex-direction: column; + justify-content: center; + align-self: center; + + img { + width: 200px; + } +} + +.rounded { + border-radius: 999px; +} diff --git a/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.module.scss.d.ts b/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.module.scss.d.ts index db9d0abfa61..0f0a5adf7fa 100644 --- a/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.module.scss.d.ts +++ b/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.module.scss.d.ts @@ -1,24 +1,28 @@ declare namespace ChaosInfrastructureReferenceFieldModuleScssNamespace { export interface IChaosInfrastructureReferenceFieldModuleScss { + activeEnv: string; agentList: string; agentListInnerContainer: string; + center: string; container: string; dialog: string; editBtn: string; fixed: string; - gap4: string; gitBranchIcon: string; gitInfo: string; greenStatus: string; iconCheck: string; iconChecked: string; item: string; + itemEnv: string; leftInfo: string; + listEnvContainer: string; notSelected: string; paginationContainer: string; placeholder: string; redStatus: string; referenceSelect: string; + rounded: string; selected: string; status: string; } diff --git a/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.tsx b/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.tsx index 4b55ba44ecc..2a5efa9853b 100644 --- a/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.tsx +++ b/chaoscenter/web/src/views/ChaosInfrastructureReferenceField/ChaosInfrastructureReferenceField.tsx @@ -8,7 +8,8 @@ import { ExpandingSearchInput, Layout, Text, - useToaster + useToaster, + useToggleOpen } from '@harnessio/uicore'; import { Icon } from '@harnessio/icons'; import cx from 'classnames'; @@ -19,6 +20,7 @@ import FallbackBox from '@images/FallbackBox.svg'; import CustomTagsPopover from '@components/CustomTagsPopover'; import Loader from '@components/Loader'; import { useRouteWithBaseUrl } from '@hooks'; +import { Environment, EnvironmentDetail } from '@api/entities'; import css from './ChaosInfrastructureReferenceField.module.scss'; export interface InfrastructureDetails { @@ -34,10 +36,14 @@ export interface InfrastructureDetails { interface ChaosInfrastructureReferenceFieldViewProps { infrastructureList: InfrastructureDetails[] | undefined; + allInfrastructureLength: number | null; + environmentList: Environment[] | undefined; preSelectedInfrastructure?: InfrastructureDetails; setInfrastructureValue: (infrastructure: InfrastructureDetails | undefined) => void; searchInfrastructure: string; setSearchInfrastructure: React.Dispatch>; + setEnvID: (id: string) => void; + envID: string | undefined; loading: { listChaosInfra: boolean; }; @@ -46,32 +52,83 @@ interface ChaosInfrastructureReferenceFieldViewProps { function ChaosInfrastructureReferenceFieldView({ infrastructureList, + environmentList, + allInfrastructureLength, preSelectedInfrastructure, setInfrastructureValue, searchInfrastructure, setSearchInfrastructure, + envID, + setEnvID, loading, pagination }: ChaosInfrastructureReferenceFieldViewProps): JSX.Element { - const [isOpen, setOpen] = React.useState(false); const paths = useRouteWithBaseUrl(); const history = useHistory(); + const [selectedInfrastructure, setSelectedInfrastructure] = React.useState( preSelectedInfrastructure ); - // const searchParams = useSearchParams(); - // const infrastructureType = - // (searchParams.get('infrastructureType') as InfrastructureType | undefined) ?? InfrastructureType.KUBERNETES; + const { isOpen, open, close } = useToggleOpen(); + const { showError } = useToaster(); const { getString } = useStrings(); - const listItem = ({ infrastructure }: { infrastructure: InfrastructureDetails }): JSX.Element => { + const EnvListItem = ({ envDetail }: { envDetail: EnvironmentDetail }): JSX.Element => { + return ( + { + setEnvID(envDetail.envID); + }} + > +
+ + + {envDetail.envName} + + + + {envDetail.totalInfra ?? 0} + +
+
+ ); + }; + + const EnvironmentList = ({ env }: { env: Environment }): JSX.Element => { + return ( + + ); + }; + + const InfrastructureListItem = ({ infrastructure }: { infrastructure: InfrastructureDetails }): JSX.Element => { + const isSelected = + selectedInfrastructure?.id === infrastructure.id || preSelectedInfrastructure?.id === infrastructure.id; + return ( { infrastructure.isActive ? setSelectedInfrastructure(infrastructure) @@ -85,7 +142,6 @@ function ChaosInfrastructureReferenceFieldView({ size={12} name="pipeline-approval" /> - {/* */} {infrastructure.name} @@ -124,6 +180,26 @@ function ChaosInfrastructureReferenceFieldView({ ); }; + const NoInfraComponent = (): JSX.Element => { + return ( + + {getString('latestRun')} + + {searchInfrastructure === '' ? getString('newUserNoInfra.title') : getString('noFilteredActiveInfra')} + + {searchInfrastructure === '' && ( +

Response samples

Content type
application/json
{
  • "message": "string"
}

Create project.

Create a new project.

+

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Decline invitation.

Decline invitation to a project.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Delete a project.

Delete a project.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Get projects owner.

Return owner of projects.

+

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get user with project.

Return a project.

+
path Parameters
project_id
required
string

Project ID

+

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get active project members.

Return list of active project members.

+
path Parameters
state
required
string

State

+

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get active project Owners.

Return list of active project owners.

+
path Parameters
state
required
string

State

+

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get project Role.

Return role of a project.

+
path Parameters
project_id
required
integer

Project ID

+

Responses

Response samples

Content type
application/json
{
  • "role": "string"
}

Get stats of a project.

Return stats of a project.

+

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get user with project.

Return users who have a project.

+
path Parameters
username
required
string

Username

+

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Leave project.

Leave project.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

List invitations.

Return list of invitations.

+
path Parameters
invitation_state
required
string

Invitation State

+

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get stats of a project.

Return stats of a project.

+

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Remove invitation.

Remove invitation of a project.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Send invitation.

Send invitation to a project.

+

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update member role.

Return updated member role.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Update project name.

Return updated project name.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

CapabilitiesRouter

Get capabilities of Auth Server.

Returns capabilities that can be leveraged by frontend services to toggle certain features.

+

Responses

Response samples

Content type
application/json
{
  • "dex": {
    }
}

UserRouter

Creates a new api token for the user.

Creates a new api token for the user.

+

Responses

Response samples

Content type
application/json
{ }

Create new user.

Create new user.

+

Responses

Response samples

Content type
application/json
{
  • "deactivatedAt": 0,
  • "email": "string",
  • "name": "string",
  • "password": "string",
  • "role": "string",
  • "userID": "string",
  • "username": "string"
}

Get user.

Get user.

+

Responses

Response samples

Content type
application/json
{
  • "deactivatedAt": 0,
  • "email": "string",
  • "name": "string",
  • "password": "string",
  • "role": "string",
  • "userID": "string",
  • "username": "string"
}

Invite users.

Invite users.

+

Responses

Response samples

Content type
application/json
{
  • "deactivatedAt": 0,
  • "email": "string",
  • "name": "string",
  • "password": "string",
  • "role": "string",
  • "userID": "string",
  • "username": "string"
}

User Login.

User Login.

+

Responses

Response samples

Content type
application/json
{ }

Revokes the token passed in the Authorization head

Revokes the token passed in the Authorization header.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Delete api token for the user.

Delete api token for the user.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Reset user password.

Reset user password.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Returns all the api tokens for the user.

Returns all the api tokens for the user.

+

Responses

Response samples

Content type
application/json
{
  • "createdAt": 0,
  • "expiresAt": 0,
  • "name": "string",
  • "token": "string",
  • "userID": "string"
}

Update users details.

Update users details.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Update user password.

Update user password.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "projectID": "string"
}

Updates the user state.

Updates the user state.

+

Responses

Response samples

Content type
application/json
{
  • "message": "string"
}

Fetch users.

Fetch users.

+

Responses

Response samples

Content type
application/json
{
  • "deactivatedAt": 0,
  • "email": "string",
  • "name": "string",
  • "password": "string",
  • "role": "string",
  • "userID": "string",
  • "username": "string"
}

DexRouter

DexRouter creates all the required routes for OAut

DexRouter creates all the required routes for OAuth purposes. .

+

Responses

Response samples

Content type
application/json
{
  • "response": "string"
}

DexRouter creates all the required routes for OAut

DexRouter creates all the required routes for OAuth purposes. .

+

Responses

Response samples

Content type
application/json
{
  • "response": "string"
}

MiscRouter

Return list of tags.

Return list of tags.

+

Responses

Response samples

Content type
application/json
{
  • "collections": "string",
  • "database": "string"
}

Status will request users list and return, if succ

Status will request users list and return, if successful, a http code 200.

+

Responses

Response samples

Content type
application/json
{
  • "status": "string"
}
+ + + + diff --git a/chaoscenter/authentication/api/docs/swagger.yaml b/mkdocs/docs/auth/v3.14.0/auth-api.yaml similarity index 68% rename from chaoscenter/authentication/api/docs/swagger.yaml rename to mkdocs/docs/auth/v3.14.0/auth-api.yaml index 5c39198b409..bc8b4d13ab5 100644 --- a/chaoscenter/authentication/api/docs/swagger.yaml +++ b/mkdocs/docs/auth/v3.14.0/auth-api.yaml @@ -1,4 +1,164 @@ definitions: + entities.Invitation: + enum: + - Pending + - Accepted + - Declined + - Exited + type: string + x-enum-varnames: + - PendingInvitation + - AcceptedInvitation + - DeclinedInvitation + - ExitedProject + entities.ListInvitationResponse: + properties: + invitationRole: + $ref: '#/definitions/entities.MemberRole' + projectID: + type: string + projectName: + type: string + projectOwner: + $ref: '#/definitions/entities.Member' + type: object + entities.ListProjectResponse: + properties: + projects: + items: + $ref: '#/definitions/entities.Project' + type: array + totalNumberOfProjects: + type: integer + type: object + entities.Member: + properties: + deactivatedAt: + type: integer + email: + type: string + invitation: + $ref: '#/definitions/entities.Invitation' + joinedAt: + type: integer + name: + type: string + role: + $ref: '#/definitions/entities.MemberRole' + userID: + type: string + username: + type: string + type: object + entities.MemberRole: + enum: + - Owner + - Executor + - Viewer + type: string + x-enum-varnames: + - RoleOwner + - RoleExecutor + - RoleViewer + entities.MemberStat: + properties: + owner: + items: + $ref: '#/definitions/entities.Owner' + type: array + total: + type: integer + type: object + entities.Owner: + properties: + deactivatedAt: + type: integer + invitation: + $ref: '#/definitions/entities.Invitation' + joinedAt: + type: integer + userID: + type: string + username: + type: string + type: object + entities.Project: + properties: + createdAt: + type: integer + createdBy: + $ref: '#/definitions/entities.UserDetailResponse' + description: + type: string + isRemoved: + type: boolean + members: + items: + $ref: '#/definitions/entities.Member' + type: array + name: + type: string + projectID: + type: string + state: + type: string + tags: + items: + type: string + type: array + updatedAt: + type: integer + updatedBy: + $ref: '#/definitions/entities.UserDetailResponse' + type: object + entities.ProjectStats: + properties: + members: + $ref: '#/definitions/entities.MemberStat' + name: + type: string + projectID: + type: string + type: object + entities.UserDetailResponse: + properties: + email: + type: string + userID: + type: string + username: + type: string + type: object + entities.UserWithProject: + properties: + createdAt: + type: integer + createdBy: + $ref: '#/definitions/entities.UserDetailResponse' + email: + type: string + id: + type: string + isRemoved: + type: boolean + name: + type: string + projects: + items: + $ref: '#/definitions/entities.Project' + type: array + updatedAt: + type: integer + updatedBy: + $ref: '#/definitions/entities.UserDetailResponse' + username: + type: string + type: object + response.APIStatus: + properties: + status: + type: string + type: object response.ApiTokenResponse: properties: createdAt: @@ -142,8 +302,32 @@ definitions: example: user does not exist type: string type: object + response.ListInvitationResponse: + properties: + data: + items: + $ref: '#/definitions/entities.ListInvitationResponse' + type: array + type: object + response.ListProjectResponse: + properties: + data: + $ref: '#/definitions/entities.ListProjectResponse' + type: object response.LoginResponse: type: object + response.Member: + properties: + data: + $ref: '#/definitions/entities.Member' + type: object + response.Members: + properties: + data: + items: + $ref: '#/definitions/entities.Member' + type: array + type: object response.MessageResponse: properties: message: @@ -151,6 +335,44 @@ definitions: type: object response.NewApiToken: type: object + response.Project: + properties: + data: + $ref: '#/definitions/entities.Project' + type: object + response.ProjectIDWithMessage: + properties: + message: + type: string + projectID: + type: string + type: object + response.ProjectRole: + properties: + role: + type: string + type: object + response.ProjectStats: + properties: + data: + items: + $ref: '#/definitions/entities.ProjectStats' + type: array + type: object + response.Projects: + properties: + data: + items: + $ref: '#/definitions/entities.Project' + type: array + type: object + response.ReadinessAPIStatus: + properties: + collections: + type: string + database: + type: string + type: object response.Response: properties: response: @@ -173,22 +395,30 @@ definitions: username: type: string type: object + response.UserWithProject: + properties: + data: + $ref: '#/definitions/entities.UserWithProject' + type: object info: contact: {} - title: Chaoscenter API documentation + title: Litmus Portal Authentication API + version: 3.14.0 + description: "Litmus Portal Authentication APIs are used to authenticate the identity of a user and to perform several user-specific tasks like:
  • Update Profile
  • Change Password
  • Reset Password
  • Create new users etc.
  • " + paths: /accept_invitation: post: consumes: - application/json - description: Accept inviation to a project. + description: Accept invitation to a project. produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.MessageResponse' "400": description: Bad Request schema: @@ -201,7 +431,7 @@ paths: description: Internal Server Error schema: $ref: '#/definitions/response.ErrServerError' - summary: Accept invitaion. + summary: Accept invitation. tags: - ProjectRouter /capabilities: @@ -235,7 +465,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.Project' "500": description: Internal Server Error schema: @@ -295,14 +525,14 @@ paths: post: consumes: - application/json - description: Deecline invitation to a project. + description: Decline invitation to a project. produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.MessageResponse' "400": description: Bad Request schema: @@ -318,6 +548,28 @@ paths: summary: Decline invitation. tags: - ProjectRouter + /delete_project/:project_id: + post: + consumes: + - application/json + description: Delete a project. + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.MessageResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.ErrProjectNotFound' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.ErrServerError' + tags: + - ProjectRouter /dex/callback: get: consumes: @@ -365,7 +617,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.Projects' "400": description: Bad Request schema: @@ -381,6 +633,35 @@ paths: summary: Get projects owner. tags: - ProjectRouter + /get_project/:project_id: + get: + consumes: + - application/json + description: Return a project. + parameters: + - description: Project ID + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.Project' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/response.ErrUnauthorized' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.ErrServerError' + summary: Get user with project. + tags: + - ProjectRouter /get_project_members/:project_id/:state: get: consumes: @@ -398,7 +679,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.Members' "500": description: Internal Server Error schema: @@ -406,6 +687,31 @@ paths: summary: Get active project members. tags: - ProjectRouter + /get_project_owners/:project_id/:state: + get: + consumes: + - application/json + description: Return list of active project owners. + parameters: + - description: State + in: path + name: state + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.Members' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.ErrServerError' + summary: Get active project Owners. + tags: + - ProjectRouter /get_project_role/:project_id: get: consumes: @@ -423,7 +729,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.ProjectRole' "400": description: Bad Request schema: @@ -446,7 +752,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.ProjectStats' "500": description: Internal Server Error schema: @@ -472,6 +778,39 @@ paths: $ref: '#/definitions/response.ErrUserNotFound' tags: - UserRouter + /get_user_with_project/:username: + get: + consumes: + - application/json + description: Return users who have a project. + parameters: + - description: Username + in: path + name: username + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.UserWithProject' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.ErrUserNotFound' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/response.ErrUnauthorized' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.ErrServerError' + summary: Get user with project. + tags: + - ProjectRouter /invite_users/:project_id: get: consumes: @@ -505,7 +844,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.MessageResponse' "400": description: Bad Request schema: @@ -538,7 +877,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.ListInvitationResponse' "500": description: Internal Server Error schema: @@ -557,7 +896,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.ListProjectResponse' "500": description: Internal Server Error schema: @@ -579,6 +918,10 @@ paths: $ref: '#/definitions/response.LoginResponse' "400": description: Bad Request + schema: + $ref: '#/definitions/response.ErrUserDeactivated' + "401": + description: Unauthorized schema: $ref: '#/definitions/response.ErrInvalidCredentials' "500": @@ -620,7 +963,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.ReadinessAPIStatus' "500": description: Internal Server Error schema: @@ -638,7 +981,7 @@ paths: "200": description: OK schema: - type: obejct + $ref: '#/definitions/response.MessageResponse' "400": description: Bad Request schema: @@ -713,7 +1056,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.Member' "400": description: Bad Request schema: @@ -733,7 +1076,7 @@ paths: get: consumes: - application/json - description: Status will request users list and return, if successful, an http + description: Status will request users list and return, if successful, a http code 200. produces: - application/json @@ -741,7 +1084,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.APIStatus' "500": description: Internal Server Error schema: @@ -803,7 +1146,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.MessageResponse' + $ref: '#/definitions/response.ProjectIDWithMessage' "400": description: Bad Request schema: @@ -836,6 +1179,33 @@ paths: $ref: '#/definitions/response.ErrUnauthorized' tags: - UserRouter + /update_member_role: + post: + consumes: + - application/json + description: Return updated member role. + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.MessageResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.ErrInvalidRequest' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/response.ErrUnauthorized' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.ErrServerError' + summary: Update member role. + tags: + - ProjectRouter /update_project_name: post: consumes: @@ -847,7 +1217,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.MessageResponse' "400": description: Bad Request schema: diff --git a/mkdocs/docs/auth/v3.9.0/auth-api.json b/mkdocs/docs/auth/v3.9.0/auth-api.json index 792b86e92c7..272de059a13 100644 --- a/mkdocs/docs/auth/v3.9.0/auth-api.json +++ b/mkdocs/docs/auth/v3.9.0/auth-api.json @@ -7,7 +7,7 @@ ], "info": { "title": "Litmus Portal Authentication API", - "version": "2.7.0", + "version": "3.9.0", "description": "Litmus Portal Authentication APIs are used to authenticate the identity of a user and to perform several user-specific tasks like:\n
  • Update Profile
  • \n
  • Change Password
  • \n
  • Reset Password
  • \n
  • Create new users etc.
  • \n" }, "paths": { diff --git a/mkdocs/docs/chaos-scheduler-v3.10.0.yaml b/mkdocs/docs/chaos-scheduler-v3.10.0.yaml new file mode 100644 index 00000000000..d96b32d1cd6 --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.10.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.10.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/chaos-scheduler-v3.11.0.yaml b/mkdocs/docs/chaos-scheduler-v3.11.0.yaml new file mode 100644 index 00000000000..8d62fb54b1b --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.11.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.11.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/chaos-scheduler-v3.12.0.yaml b/mkdocs/docs/chaos-scheduler-v3.12.0.yaml new file mode 100644 index 00000000000..547c4d443e7 --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.12.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.12.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/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/chaos-scheduler-v3.14.0.yaml b/mkdocs/docs/chaos-scheduler-v3.14.0.yaml new file mode 100644 index 00000000000..84c38ffc321 --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.14.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.14.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/chaos-scheduler-v3.15.0.yaml b/mkdocs/docs/chaos-scheduler-v3.15.0.yaml new file mode 100644 index 00000000000..aafb913636f --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.15.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.15.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/chaos-scheduler-v3.16.0.yaml b/mkdocs/docs/chaos-scheduler-v3.16.0.yaml new file mode 100644 index 00000000000..02d085acbb6 --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.16.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.16.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/chaos-scheduler-v3.17.0.yaml b/mkdocs/docs/chaos-scheduler-v3.17.0.yaml new file mode 100644 index 00000000000..dfbd6b0db3d --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.17.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.17.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/chaos-scheduler-v3.18.0.yaml b/mkdocs/docs/chaos-scheduler-v3.18.0.yaml new file mode 100644 index 00000000000..0ee329908ca --- /dev/null +++ b/mkdocs/docs/chaos-scheduler-v3.18.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.18.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/experiments/api/contents.md b/mkdocs/docs/experiments/api/contents.md index c06cec65207..1ea43288dc8 100644 --- a/mkdocs/docs/experiments/api/contents.md +++ b/mkdocs/docs/experiments/api/contents.md @@ -9,11 +9,11 @@ AUTH Server Contains AUTH Server API documentation -AUTH Server +AUTH Server GraphQL Server Contains GraphQL Server API documentation -GraphQL Server +GraphQL Server \ No newline at end of file diff --git a/mkdocs/docs/experiments/faq/install.md b/mkdocs/docs/experiments/faq/install.md index 6b99ac13af3..6dd89eec7af 100644 --- a/mkdocs/docs/experiments/faq/install.md +++ b/mkdocs/docs/experiments/faq/install.md @@ -28,19 +28,19 @@ hide: ### I encountered the concept of namespace and cluster scope during the installation. What is meant by the scopes, and how does it affect experiments to be performed outside or inside the litmus Namespace? -The scope of control plane (portal) installation can be tuned by the env PORTAL_SCOPE in the litmusportal-server deployment. Its value can be kept as a “namespace” if you want to provide restricted access to litmus. It is useful in strictly multi-tenant environments in which users have namespace-level permissions and need to set up their own chaos-center instances. This is also the case in certain popular SaaS environments like Okteto cloud. +The scope of control plane (portal) installation can be tuned by the env 'PORTAL_SCOPE' in the 'litmusportal-server' deployment. Its value can be kept as a “namespace” if you want to provide restricted access to litmus. It is useful in strictly multi-tenant environments in which users have namespace-level permissions and need to set up their own chaos-center instances. This is also the case in certain popular SaaS environments like Okteto cloud. -This setting can be used in combination with a flag, AGENT_SCOPE in the litmus-portal-admin-config configmap to limit the purview of the corresponding self-agent (the execution plane pods on the cluster/namespace where the control plane is installed) to the current namespace, which means the user can perform chaos experiments only in chose installation namespace. By default, both are set up for cluster-wide access, by which microservices across the cluster can be subjected to chaos. +This setting can be used in combination with a flag, 'AGENT_SCOPE' in the 'litmus-portal-admin-config' ConfigMap to limit the purview of the corresponding self-agent (the execution plane pods on the cluster/namespace where the control plane is installed) to the current namespace, which means the user can perform chaos experiments only in chosen installation namespace. By default, both are set up for cluster-wide access, by which microservices across the cluster can be subjected to chaos. -In case of external-agents, i.e., the targets being connected to the chaos-center, you can choose the agent’s scope to either cluster or namespace via a litmusctl flag (when using it in non-interactive mode) or by providing the appropriate input (in interactive mode). +In case of external-agents, i.e., the targets being connected to the chaos-center, you can choose the agent’s scope to either cluster or namespace via a 'litmusctl' flag (when using it in non-interactive mode) or by providing the appropriate input (in interactive mode). ### Does Litmus 2.0 maintain backward compatibility with Kubernetes? -Yes Litmus maintains a separate CRD manifest to support backward compatibility. +Yes, Litmus maintains a separate CRD manifest to support backward compatibility. ### Can I run LitmusChaos Outside of my Kubernetes clusters? -You can run the chaos experiments outside of the k8s cluster(as a container) which is dockerized. But other components such as chaos-operator,chaos-exporter, and runner are Kubernetes native. They require k8s cluster to run on it. +You can run the chaos experiments outside of the k8s cluster as a dockerized container. However, other components such as chaos-operator,chaos-exporter, and runner are Kubernetes native. They require k8s cluster to run on it. ### What is the minimum system requirement to run Portal and agent together? @@ -48,11 +48,11 @@ To run LitmusPortal you need to have a minimum of 1 GiB memory and 1 core of CPU ### Can I use LitmusChaos in Production? -Yes, you can use Litmuschaos in production. Litmus has a wide variety of experiments and is designed as per the principles of chaos. But, if you are new to Chaos Engineering, we would recommend you to first try Litmus on your dev environment, and then after getting the confidence, you should use it in Production. +Yes, you can use Litmuschaos in production. Litmus has a wide variety of experiments and is designed according to the principles of chaos engineering. However, if you are new to Chaos Engineering, we would recommend you to first try Litmus on your dev environment, and then after getting the confidence, you should use it in Production. ### Why should I use Litmus? What is its distinctive feature? -Litmus is a toolset to do cloud-native Chaos Engineering. Litmus provides tools to orchestrate chaos on Kubernetes to help developers and SREs find weaknesses in their application deployments. Litmus can be used to run chaos experiments initially in the staging environment and eventually in production to find bugs, vulnerabilities. Fixing the weaknesses leads to increased resilience of the system. Litmus adopts a “Kubernetes-native” approach to define chaos intent in a declarative manner via custom resources. +Litmus is a toolset for performing cloud-native Chaos Engineering. Litmus provides tools to orchestrate chaos on Kubernetes to help developers and SREs find weaknesses in their application deployments. Litmus can be used to run chaos experiments initially in the staging environment and eventually in production to find bugs and vulnerabilities. Fixing the weaknesses leads to increased resilience of the system. Litmus adopts a “Kubernetes-native” approach to define chaos intent in a declarative manner via custom resources. ### What licensing model does Litmus use? @@ -60,7 +60,7 @@ Litmus is developed under Apache License 2.0 license at the project level. Some ### What are the prerequisites to get started with Litmus? -For getting started with Litmus the only prerequisites is to have Kubernetes 1.11+ cluster. While most pod/container level experiments are supported on any Kubernetes platform, some of the infrastructure chaos experiments are supported on specific platforms. To find the list of supported platforms for an experiment, view the "Platforms" section on the sidebar in the experiment page. +To get started with Litmus, the only prerequisites is to have Kubernetes 1.11+ cluster. While most pod/container level experiments are supported on any Kubernetes platform, some of the infrastructure chaos experiments are supported on specific platforms. To find the list of supported platforms for an experiment, view the "Platforms" section on the sidebar in the experiment page. ### How to Install Litmus on the Kubernetes Cluster? 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.10.0/images/favicon.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.10.0/images/logo.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.10.x/images/favicon.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.10.x/images/logo.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.11.0/images/favicon.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.11.0/images/logo.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.11.x/images/favicon.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.11.x/images/logo.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.9.0/images/favicon.png differ 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 00000000000..db508c437e3 Binary files /dev/null and b/mkdocs/docs/graphql/v3.9.0/images/logo.png differ 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 diff --git a/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-operator.yaml b/mkdocs/docs/litmus-namespaced-scope/litmus-namespaced-operator.yaml index 49772fe413f..d72cbd6387f 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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-operator:3.18.0 command: - chaos-operator imagePullPolicy: Always env: - name: CHAOS_RUNNER_IMAGE - value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.9.0" + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.18.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 326fdfee6b5..d5e1ce2e6c5 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.9.0 + image: litmuschaos.docker.scarf.sh/litmuschaos/chaos-scheduler:3.18.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 0fd357eb2aa..96a91f29cc4 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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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 79959c367f7..a1e07bcbcda 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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.9.0 + app.kubernetes.io/version: v3.18.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.10.0.yaml b/mkdocs/docs/litmus-operator-v3.10.0.yaml new file mode 100644 index 00000000000..f939926bece --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.10.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.10.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.10.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.10.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.10.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.10.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.10.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.10.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 diff --git a/mkdocs/docs/litmus-operator-v3.11.0.yaml b/mkdocs/docs/litmus-operator-v3.11.0.yaml new file mode 100644 index 00000000000..280632d6352 --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.11.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.11.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.11.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.11.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.11.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.11.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.11.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.11.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 diff --git a/mkdocs/docs/litmus-operator-v3.12.0.yaml b/mkdocs/docs/litmus-operator-v3.12.0.yaml new file mode 100644 index 00000000000..8fe8e04add2 --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.12.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.12.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.12.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.12.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.12.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.12.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.12.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.12.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 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 diff --git a/mkdocs/docs/litmus-operator-v3.14.0.yaml b/mkdocs/docs/litmus-operator-v3.14.0.yaml new file mode 100644 index 00000000000..79942077f2e --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.14.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.14.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.14.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.14.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.14.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.14.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.14.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.14.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 diff --git a/mkdocs/docs/litmus-operator-v3.15.0.yaml b/mkdocs/docs/litmus-operator-v3.15.0.yaml new file mode 100644 index 00000000000..ed3d3a010d2 --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.15.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.15.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.15.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.15.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.15.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.15.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.15.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.15.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 diff --git a/mkdocs/docs/litmus-operator-v3.16.0.yaml b/mkdocs/docs/litmus-operator-v3.16.0.yaml new file mode 100644 index 00000000000..6a1205543bd --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.16.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.16.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.16.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.16.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.16.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.16.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.16.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.16.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 diff --git a/mkdocs/docs/litmus-operator-v3.17.0.yaml b/mkdocs/docs/litmus-operator-v3.17.0.yaml new file mode 100644 index 00000000000..bc663d1cf70 --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.17.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.17.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.17.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.17.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.17.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.17.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.17.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.17.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 diff --git a/mkdocs/docs/litmus-operator-v3.18.0.yaml b/mkdocs/docs/litmus-operator-v3.18.0.yaml new file mode 100644 index 00000000000..aa042a42abe --- /dev/null +++ b/mkdocs/docs/litmus-operator-v3.18.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.18.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.18.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.18.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.18.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.18.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.18.0 + command: + - chaos-operator + args: + - -leader-elect=true + imagePullPolicy: Always + env: + - name: CHAOS_RUNNER_IMAGE + value: "litmuschaos.docker.scarf.sh/litmuschaos/chaos-runner:3.18.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 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 00000000000..54b6a93421e Binary files /dev/null and b/monitoring/tutorials/otel-demo/screenshots/cart_service_pod_network_latency_experiment_result_dashboard.png differ 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 00000000000..5e1e2b97f9f Binary files /dev/null and b/monitoring/tutorials/otel-demo/screenshots/cartservice_spanmetrics.png differ 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 00000000000..5044ad3333b Binary files /dev/null and b/monitoring/tutorials/otel-demo/screenshots/frontend_spanmetrics.png differ 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 00000000000..919cf82e7cd Binary files /dev/null and b/monitoring/tutorials/otel-demo/screenshots/otel_demo_tutorial_architecture.png differ 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 00000000000..10ae21b1be2 Binary files /dev/null and b/monitoring/tutorials/otel-demo/screenshots/recommendation_service_pod_delete_experiment_result_dashboard.png differ 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 00000000000..390a1ae780b Binary files /dev/null and b/proposals/images/distributed-tracing-demo-arch.png differ diff --git a/proposals/images/distributed-tracing-example.png b/proposals/images/distributed-tracing-example.png new file mode 100644 index 00000000000..77e34ed2cc3 Binary files /dev/null and b/proposals/images/distributed-tracing-example.png differ diff --git a/proposals/images/locust-fault-scenario.png b/proposals/images/locust-fault-scenario.png new file mode 100644 index 00000000000..0fba4287016 Binary files /dev/null and b/proposals/images/locust-fault-scenario.png differ diff --git a/proposals/images/rds-fault-scenario.png b/proposals/images/rds-fault-scenario.png new file mode 100644 index 00000000000..5aac2c307fc Binary files /dev/null and b/proposals/images/rds-fault-scenario.png differ 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 diff --git a/proposals/jvm-fault-injection.md b/proposals/jvm-fault-injection.md new file mode 100644 index 00000000000..c4ac89e54b6 --- /dev/null +++ b/proposals/jvm-fault-injection.md @@ -0,0 +1,105 @@ +| title | authors | creation-date | last-updated | +|-------|------------------------------------------|---------------|--------------| +| JVM fault injection | [@bjoky](https://github.com/bjoky) | 2024-12-05 | 2024-12-05 | + +# JVM Fault Injection + +- [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) + +## Summary + +This is a proposal to add a new type of fault to Litmus that can be used to perform experiments on a Java Virtual Machine (JVM). The proposed two faults, to begin with, are a CPU hog and a memory hog. + +## Motivation + +Java applications run in a virtual machine. They may behave in upredictable ways with high CPU or memory consumption, which may be different from only high CPU or memory usage in the container it is running. For example, high memory consumption of the JVM can trigger the garbage collection mechanisms. + +This makes it interesting to be able to run experiments in Litmus that targets applications running in a JVM. + +### Goals + +The JVM fault injection should support two different faults: CPU hog/consumption and memory hog/consumption. + +Target Java versions will be 17 and above. + +### Non-Goals + +The first version of this JVM fault injection will not support anything other than CPU and memory consumption. + +It will for example not use Byteman (see [Alternatives](#alternatives)) or any other tools that could inject any type change or error in the JVM. This could be expanded on in the future. + +## Proposal + +### Use Cases + +#### Use case 1 - Memory consumption + +The memory consumption fault will make it possible to consume memory in iterations. + +It will be possible to tune the experiment for amount of memory allocated for each iteration, how long to wait between iterations and how long the total duration will be. + +It will also be possible the configure if the experiment should keep the references to the allocated memory for the total duration of the experiment. If references are kept, it will not be possible for the JVM to garbage collection the memory, which means that the memory will fill up gradually, until an OutOfMemoryError exception is thrown or the experiment ends. After the duration of the experiment, all references will be freed up for garabage collection. + +#### Use case 2 CPU consumption + +The CPU consumption fault will make it possible to run CPU intensive operations for a duration of time. + +It will be possible to tune the experiment for the number of threads that will run in parallell and for how long the total duration will be. + +The operation used to consume CPU will be a Fibonacci number calculation. + +### Implementation Details + +The JVM fault injection will use the Java Instrumentation API. Using that it will run a Java agent that can alter the existing byte code loaded into the JVM in runtime. + +In the case of the memory consumption fault, it will start one thread for that. In the case of the cpu consumption fault, it will start a number of threads, depending on how the experiment was tuned. + +The Java agent will be initiated through a Litmus helper, using the litmus-go image. The image will need to include the jar file with the agent, but should be able to use the Java runtime of the target container to initiate the agent. + +If the experiment is stopped or interrupted, there must be a way to stop any ongoing agent threads in the target JVMs. + +The implementation will be done in several phases, rather than everything at once, so that each step can be properly reviewed. This is a rough outline of the phases: + +##### Phase 1 +The first phase will be to add the Java agent code to the litmus-go repository. + +#### Phase 2 +The second phase will be to build the Java code as part of the litmus-go build, and include it in the image. + +#### Phase 3 +The third phase will be to add the new fault to the litmus-go library and the command call to start the agent. This should include being able to lookup runtime IDs such as process, group and user IDs that are necessary to inject the agent. + +#### Phase 4 +The fourth phase will be to make the faults available, add to chaos-charts and what else is needed to be able to select it in the Chaos Studio. + +## Risks and Mitigations + +## Upgrade / Downgrade Strategy + +## Drawbacks + +## Alternatives + +An alternative to this would be to use something like [Byteman](https://byteman.jboss.org/). Byteman is also running as an agent using the Java instrumentation API. The difference is that it allows the user to make any type of change to JVM. This means that it supports other types of use cases than fault injection, such as monitoring and tracing, that may be outside the scope of chaos engineering. + +This means that it brings more complexity and a higher threshold to begin using it. It might be overkill for just the simple use cases outlined above. + +I think Byteman can be intersting in the long run. And I imagine this JVM Fault Injection could be enhanced in the future to use Byteman instead or Byteman could be added as an additional fault. + +## References + +- [Java instrumentation API](https://docs.oracle.com/en/java/javase/21/docs/api/java.instrument/java/lang/instrument/Instrumentation.html) +- [Java instrumentation API introduction](https://medium.com/o11y/what-is-java-instrumentation-why-is-it-needed-1f9aa467433) +- [Byteman](https://byteman.jboss.org/) +- [Byteman source](https://github.com/bytemanproject/byteman) diff --git a/proposals/locust-load-test.md b/proposals/locust-load-test.md new file mode 100644 index 00000000000..70890248491 --- /dev/null +++ b/proposals/locust-load-test.md @@ -0,0 +1,65 @@ +| title | authors | creation-date | last-updated | +|-------|------------------------------------------|---------------|--------------| +| Adding a New Chaos Fault - Load Testing with locust | [@kwx4957](https://github.com/kwx4957) | 2024-11-21 | 2024-11-21 | + +# Adding a New Chaos Fault - Load Testing with locust + +- [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) + +## Summary +[locust](https://locust.io/) is an open-source load testing. LitmuChaos already supports k6 load testing, but only for the JavaScript language. On the other hand, locust supports writing scripts for Python code, giving users a wider choice. + +## Motivation +Locust is a load testing tool that supports Python code. It supports various [protocols (HTTP, GRPC)](https://docs.locust.io/en/stable/testing-other-systems.html +) and [plugins](https://github.com/SvenskaSpel/locust-plugins?tab=readme-ov-file#users +). Having a wide range of choices when it comes to choosing a load test will help users a lot. + + +### Goals + +- Adding a 'locust' Chaos Fault to [Litmus ChaosHub](https://hub.litmuschaos.io/) +- Fixing [litmus-go](https://github.com/litmuschaos/litmus-go) and [chaos-charts](https://github.com/litmuschaos/chaos-charts) codes + +### Non-Goals + +## Proposal + +### Use Cases + +Detail the things that people will be able to do if this is `implemented`. + +#### Use case 1 + +### Implementation Details + +This is a Locust Chaos Fault Scenario. + +![locust-fault-scenario](./images/locust-fault-scenario.png) + +1. Add scenario to the litmus-go repository +2. Add a new Chaos Fault to the Litmus ChaosHub + +## Risks and Mitigations + +We need to grant proper RBAC permissions to the runner container. Granting override permissions may affect other systems. + +## Upgrade / Downgrade Strategy + +## Drawbacks + +## Alternatives + +## References + +- [locust](https://locust.io/) \ No newline at end of file diff --git a/proposals/python-sdk.md b/proposals/python-sdk.md new file mode 100644 index 00000000000..a22850d3517 --- /dev/null +++ b/proposals/python-sdk.md @@ -0,0 +1,109 @@ +| title | authors | creation-date | last-updated | +|-----------------------|------------------------------------|---------------|--------------| +| add litmus python sdk | [@inpyu](https://github.com/inpyu) | 2024-12-31 | 2024-12-31 | + +# Adding Litmus python SDK + +- [Adding Litmus python SDK](#adding-litmus-python-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-python-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 Python-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 + +## Proposal + +### Use Cases + +In organization, litmusChaos administrators can call python SDK to manage multiple users and projects. + +### Implementation Details + +#### Initialize client + +```python +class LitmusClient: + def __init__(self, host_url, username, password): + self.host_url = host_url + self.username = username + self.password = password + self.session = requests.Session() + self.session.auth = (username, password) + + def create_project(self, project_name, description, tags): + url = f"{self.host_url}/projects" + payload = { + "projectName": project_name, + "description": description, + "tags": tags + } + response = self.session.post(url, json=payload) + + if response.status_code == 201: + return response.json() + else: + response.raise_for_status() + +def init(): + host_url = "http://localhost:3000" + username = "admin" + password = "litmus" + return LitmusClient(host_url, username, password) + +``` +#### Use Client +```python +def execute(): + client = init() + + project_name = "demo project" + description = "demo project description" + tags = ["litmus", "chaos"] + + response = client.create_project(project_name, description, tags) + print(response) + +``` +## 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 python sdk we created in Litmus. No other alternatives exist. + +## References diff --git a/proposals/rds-instance-chaos-fault.md b/proposals/rds-instance-chaos-fault.md new file mode 100644 index 00000000000..ebae1c3bebc --- /dev/null +++ b/proposals/rds-instance-chaos-fault.md @@ -0,0 +1,71 @@ +| title | authors | creation-date | last-updated | +|--------------------------------------------------|------------------------------------------|---------------|--------------| +| Adding a New Chaos Fault - AWS RDS Instance Stop | [@jongwooo](https://github.com/jongwooo) | 2024-09-02 | 2024-09-02 | + +# Adding a New Chaos Fault - AWS RDS Instance Stop + +- [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) + +## Summary + +[Amazon Relational Database Service (RDS)](https://aws.amazon.com/en/rds/) is a managed relational database service provided by AWS. It is a fully managed database service that makes it easy to set up, operate, and scale a relational database in the cloud. +So I want to add a new chaos fault(rds instance stop) to Litmus ChaosHub. + +## Motivation + +Litmus ChaosHub has plenty of Chaos Faults. But there is no Chaos Fault for RDS. RDS is a widely used service in AWS. So I want to add a new Chaos Fault for RDS. Adding 'rds instance stop' Chaos Fault to Litmus ChaosHub can help create a more resilient system. +### Goals + +- Adding a 'rds instance stop' Chaos Fault to [Litmus ChaosHub](https://hub.litmuschaos.io/) +- Fixing [litmus-go](https://github.com/litmuschaos/litmus-go) and [chaos-charts](https://github.com/litmuschaos/chaos-charts) codes + +### Non-Goals + +- Fixing Litmus codes except for [litmus-go](https://github.com/litmuschaos/litmus-go) and [chaos-charts](https://github.com/litmuschaos/chaos-charts) is a non-goal + +## Proposal + +### Use Cases + +#### Use case 1 + +In Chaos Studio, Users can select 'rds instance stop' Chaos Fault as part of the Chaos Experiment. They can compose it with other Chaos Faults. + +### Implementation Details + +Here's a Chaos Fault Scenario. + +![rds-fault-scenario](./images/rds-fault-scenario.png) + +#### Phase 1 - Add scenario to the litmus-go repository + +I will use `litmuschaos/go-runner` image. So I am going to add a new case in the litmus-go repository. + +#### Phase 2 - Add a new Chaos Fault to the Litmus ChaosHub + +After Phase 1 PR gets merged, I will raise a PR that adds a 'rds instance stop' Chaos Fault to the `chaos-charts` repository. When all is done, the user can easily assault the AWS RDS instance. + +## Risks and Mitigations + +We need to grant proper RBAC permissions to the runner container. Granting override permissions may affect other systems. + +## Upgrade / Downgrade Strategy + +## Drawbacks + +## Alternatives + +## References + +- [Amazon Relational Database Service (RDS)](https://aws.amazon.com/en/rds/) diff --git a/proposals/replace-mongoDB-features.md b/proposals/replace-mongoDB-features.md new file mode 100644 index 00000000000..bde070c331e --- /dev/null +++ b/proposals/replace-mongoDB-features.md @@ -0,0 +1,38 @@ +| title | authors | creation-date | last-updated | +|-------|------------------------------------------|---------------|--------------| +| Replace mongoDB features not supported by AWS | [@kwx4957](https://github.com/kwx4957) | | | + +### Summary + +There are some operators that are supported by mongoDB but not by aws documentDB. Enhancing this feature with other features or code would make LitmusChaos more developer-friendly on AWS. + +### Goals + +- Changing features not supported by the cloud environment (AWS) with alternative operators or in code + +### Implementation Details +[AWS support api scanning](https://docs.aws.amazon.com/documentdb/latest/developerguide/migration-playbook.html) + +As a result of using these features, the two operators $facet and $bucket are not supported by AWS. We are using the following features in graphQL and expect that modifying them with other features or code will make it easier to run LitmusChaos on AWS. + +``` +he following 2 unsupported operators were found: + $facet | found 8 time(s) + $bucket | found 1 time(s) + +Unsupported operators by filename and line number: + $facet | lines = found 8 time(s) + ../../litmus/chaoscenter/graphql/server/pkg/chaos_infrastructure/service.go | lines = [664, 841] + ../../litmus/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go | lines = [733, 955, 1131] + ../../litmus/chaoscenter/graphql/server/pkg/chaos_experiment_run/handler/handler.go | lines = [531] + ../../litmus/chaoscenter/graphql/server/pkg/environment/handler/handler.go | lines = [346] + ../../litmus/chaoscenter/graphql/server/pkg/chaoshub/service.go | lines = [922] + $bucket | lines = found 1 time(s) + ../../litmus/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go | lines = [1106] +``` + + +## References +[issue#4459](https://github.com/litmuschaos/litmus/issues/4459) +[AWS support api](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html#w144aac17c19b5b3) +[Azure support api](https://learn.microsoft.com/es-es/azure/cosmos-db/mongodb/feature-support-36#aggregation-stages) \ No newline at end of file diff --git a/translations/README-ko.md b/translations/README-ko.md index c473baa882b..6f9b59c6acd 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -97,9 +97,18 @@ ChaosExperiment CR은 hub.l ### 비디오 +- [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) +- [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) @@ -141,7 +150,7 @@ ChaosExperiment CR은 hub.l (카오스 엔지니어링 사례로 Litmus를 사용하고 있는 조직은 위 페이지로 PR을 보내주세요) -## 라이센스 +## 라이선스 Litmus는 아파치(Apache) 라이선스 버전 2.0을 적용합니다. 전체 라이선스 텍스트는 [LICENSE](./LICENSE)를 참고하세요. Litmus 프로젝트에서 사용하는 일부 프로젝트는 다른 라이선스에 적용받을 수 있으며, 별도의 라이선스를 참고하세요.