diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dd3b8ce
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,34 @@
+# Try to prevent people from checking in binaries
+*.zip
+*.gz
+*.tar
+*.tar.gz
+*.tgz
+*.xz
+*.exe
+*.fls
+*.bin
+*.dll
+*.so*
+*.o
+*.a
+*.mp3
+*.mv4
+*.mpg
+*.mov
+*.pyc
+*~
+bin/
+.*
+!.gitignore
+tags
+ctags
+*.gcda
+*.gcno
+*.su
+vgcore*
+*.gcov
+\#*
+*,PID
+coverage.out
+coverage.html
\ No newline at end of file
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..89330ca
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,81 @@
+```
+SPDX-License-Identifier: Apache-2.0
+Copyright (c) 2019-2020 Intel Corporation
+```
+
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the EMCO maintainers. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..6ecb8b1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,176 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..f70febf
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,112 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+export GO111MODULE=on
+export EMCOBUILDROOT=$(shell pwd)
+export CONFIG := $(wildcard config/*.txt)
+
+all: check-env docker-reg build
+
+check-env:
+ @echo "Check for environment parameters"
+ifndef EMCODOCKERREPO
+ $(error EMCODOCKERREPO env variable needs to be set)
+endif
+
+docker-reg:
+ @echo "Setting up docker Registry with base image"
+export BUILD_BASE_IMAGE_NAME := $(shell cat $(CONFIG) | grep 'BUILD_BASE_IMAGE_NAME' | cut -d'=' -f2)
+export BUILD_BASE_IMAGE_VERSION := $(shell cat $(CONFIG) | grep 'BUILD_BASE_IMAGE_VERSION' | cut -d'=' -f2)
+export SERVICE_BASE_IMAGE_NAME := $(shell cat $(CONFIG) | grep 'SERVICE_BASE_IMAGE_NAME' | cut -d'=' -f2)
+export SERVICE_BASE_IMAGE_VERSION := $(shell cat $(CONFIG) | grep 'SERVICE_BASE_IMAGE_VERSION' | cut -d'=' -f2)
+
+clean:
+ @echo "Cleaning artifacts"
+ $(MAKE) -C ./src/clm clean
+ $(MAKE) -C ./src/monitor clean
+ $(MAKE) -C ./src/ncm clean
+ $(MAKE) -C ./src/orchestrator clean
+ $(MAKE) -C ./src/ovnaction clean
+ $(MAKE) -C ./src/dtc clean
+ $(MAKE) -C ./src/rsync clean
+ $(MAKE) -C ./src/dcm clean
+ $(MAKE) -C ./src/genericactioncontroller clean
+ $(MAKE) -C ./src/tools/emcoctl clean
+ @rm -rf bin
+ @echo " Done."
+
+pre-compile: clean
+ @echo "Setting up pre-requisites"
+ @mkdir -p bin/clm bin/monitor bin/ncm bin/orchestrator bin/ovnaction bin/dtc bin/rsync bin/dcm bin/genericactioncontroller bin/emcoctl
+ @cp -r src/clm/config.json src/clm/json-schemas bin/clm
+ @cp -r src/ncm/config.json src/ncm/json-schemas bin/ncm
+ @cp -r src/orchestrator/config.json src/orchestrator/json-schemas bin/orchestrator
+ @cp -r src/ovnaction/config.json src/ovnaction/json-schemas bin/ovnaction
+ @cp -r src/genericactioncontroller/config.json src/genericactioncontroller/json-schemas bin/genericactioncontroller
+ @cp -r src/dtc/config.json src/dtc/json-schemas bin/dtc
+ @cp -r src/rsync/config.json bin/rsync
+ @cp -r src/dcm/config.json bin/dcm
+ @echo " Done."
+
+compile-container: pre-compile
+ @echo "Building artifacts"
+ $(MAKE) -C ./src/clm all
+ $(MAKE) -C ./src/monitor all
+ $(MAKE) -C ./src/ncm all
+ $(MAKE) -C ./src/orchestrator all
+ $(MAKE) -C ./src/ovnaction all
+ $(MAKE) -C ./src/dtc all
+ $(MAKE) -C ./src/rsync all
+ $(MAKE) -C ./src/dcm all
+ $(MAKE) -C ./src/genericactioncontroller all
+ $(MAKE) -C ./src/tools/emcoctl all
+ @echo " Done."
+
+compile:
+ @echo "Building microservices within Docker build container"
+ @docker run --rm --user `id -u`:`id -g` --env GO111MODULE --env XDG_CACHE_HOME=/tmp/.cache -v `pwd`:/repo ${EMCODOCKERREPO}${BUILD_BASE_IMAGE_NAME}${BUILD_BASE_IMAGE_VERSION} /bin/sh -c "cd /repo; make compile-container"
+ @echo " Done."
+
+build: compile
+ @echo "Packaging microservices "
+ @echo "Packaging CLM"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-clm -f ./build/docker/Dockerfile.clm ./bin/clm
+ @echo "Packaging NCM"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-ncm -f ./build/docker/Dockerfile.ncm ./bin/ncm
+ @echo "Packaging Orchestrator"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-orch -f ./build/docker/Dockerfile.orchestrator ./bin/orchestrator
+ @echo "Packaging OvnAction"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-ovn -f ./build/docker/Dockerfile.ovn ./bin/ovnaction
+ @echo "Packaging GenericActionController"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-gac -f ./build/docker/Dockerfile.gac ./bin/genericactioncontroller
+ @echo "Packaging DTC"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-dtc -f ./build/docker/Dockerfile.dtc ./bin/dtc
+ @echo "Packaging RSync"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-rsync -f ./build/docker/Dockerfile.rsync ./bin/rsync
+ @echo "Packing DCM"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-dcm -f ./build/docker/Dockerfile.dcm ./bin/dcm
+ @echo "Packing Monitor"
+ @docker build --build-arg EMCODOCKERREPO=${EMCODOCKERREPO} --build-arg SERVICE_BASE_IMAGE_NAME=${SERVICE_BASE_IMAGE_NAME} --build-arg SERVICE_BASE_IMAGE_VERSION=${SERVICE_BASE_IMAGE_VERSION} --rm -t emco-monitor -f ./build/docker/Dockerfile.monitor ./bin/monitor
+ @echo " Done."
+
+deploy: build
+ @echo "Creating helm charts. Pushing microservices to registry & copying docker-compose files if BUILD_CAUSE set to DEV_TEST"
+ ./scripts/deploy_emco.sh
+ @echo " Done."
+
+tidy:
+ @echo "Cleaning up dependencies"
+ @cd src/clm; go mod tidy
+ @cd src/dcm; go mod tidy
+ @cd src/monitor; go mod tidy
+ @cd src/ncm; go mod tidy
+ @cd src/orchestrator; go mod tidy
+ @cd src/ovnaction; go mod tidy
+ @cd src/genericactioncontroller; go mod tidy
+ @cd src/dtc; go mod tidy
+ @cd src/rsync; go mod tidy
+ @cd src/tools/emcoctl; go mod tidy
+ @echo " Done."
+
+build-base:
+ @echo "Building base images and pushing to Harbor"
+ ./scripts/build-base-images.sh
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..17c6404
--- /dev/null
+++ b/README.md
@@ -0,0 +1,109 @@
+```
+SPDX-License-Identifier: Apache-2.0
+Copyright (c) 2019-2020 Intel Corporation
+```
+
+# EMCO
+
+## Overview
+
+The Edge Multi-Cluster Orchestrator (EMCO) is a software framework for
+intent-based deployment of cloud-native applications to a set of Kubernetes
+clusters, spanning enterprise data centers, multiple cloud service providers
+and numerous edge locations. It is architected to be flexible, modular and
+highly scalable. It is aimed at various verticals, including telecommunication
+service providers.
+
+## Build and Deploy EMCO
+
+### Set up the environment
+
+Set up the following environment variables. Note that the value for the
+container registry URL must end with a `/`.
+
+```
+export EMCODOCKERREPO=${container_registry_url}/
+export HTTP_PROXY=${http_proxy}
+export HTTPS_PROXY=${https_proxy}
+
+```
+### Update the base container images, if needed
+
+The external dependencies for EMCO are captured partly in the environment
+variables above and partly in a configuration file `config/config.txt`.
+
+The configuration file specifies two important parameters:
+ * `BUILD_BASE_IMAGE`: The name and version of the base image used for
+ building EMCO components themselves.
+ * `SERVICE_BASE_IMAGE`: The name and version of the base image used to
+ deploy the microservices that constitute EMCO.
+
+By default, `config.txt` has the following content:
+```
+BUILD_BASE_IMAGE_NAME=emco-service-build-base
+BUILD_BASE_IMAGE_VERSION=:1.1
+SERVICE_BASE_IMAGE_NAME=alpine
+SERVICE_BASE_IMAGE_VERSION=:3.12
+```
+
+By default, `emco-service-build-base` is built from `golang:1.14.1-alpine`, with the `make` utility added.
+
+You may want to review and possibly update the base image names and versions.
+
+Note: The build base image should be based on a Linux distribution that uses `apt` for package management, such as Alpine, Debian or Ubuntu. It should also provide Go language version 1.14.
+
+### Populate the EMCODOCKERREPO registry
+
+Populate the EMCODOCKERREPO registry with base images listed in `config/config.txt`, along with `mongodb` and `etcd` images.
+
+The base images and versions that have been validated are as below:
+ 1. Alpine:3.12 (for deploying EMCO components)
+ 2. golang:1.14.1-alpine (for building EMCO components)
+ 3. mongo:4.4.1
+ 4. etcd:3
+
+### Create the build base image in the EMCODOCKERREPO registry
+
+EMCO does not assume that the base build image, such as `golang:1.14.1-alpine`, has the necessary utilities such as `make`.
+
+Run the following to create the final build container image and populate that
+in the `EMCODOCKERREPO` registry.
+
+```
+make build-base
+```
+
+### Deploy EMCO locally
+You can build and deploy the EMCO components in your local environment (and
+use them to deploy your workload in a set of remote Kubernetes clusters).
+
+This is done in two stages:
+
+ * Build the EMCO components:
+ ```make all```
+ This spawns a build container that generates the needed EMCO binaries and
+ container images.
+ * Deploy EMCO components locally:
+ ```docker-compose up```
+ using `deployments/docker/docker-compose.yml`. This spawns a set of
+ containers, each running one EMCO component.
+
+See [this tutorial](docs/user/Tutorial_Local_Install.md) for further details.
+
+### Deploy EMCO in a Kubernetes cluster
+Alternatively, you can build EMCO locally and deploy EMCO components in a
+Kubernetes cluster using Helm charts (and use them to deploy your workload in
+another set of Kubernetes clusters).
+
+Do the following steps:
+
+ * Set up the environment:
+ ```export BUILD_CAUSE=DEV_TEST```
+ This triggers the following steps to push the locally generated EMCO images
+ to the `EMCODOCKERREPO` container registry with appropriate tags.
+ * Set up the Helm charts: Be sure to reference those image names and tags in
+ your Helm charts.
+ * Build and deploy EMCO:
+ ```make deploy```
+
+See [this tutorial](docs/user/Tutorial_Helm.md) for further details.
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
new file mode 100755
index 0000000..98288bf
--- /dev/null
+++ b/ReleaseNotes.md
@@ -0,0 +1,41 @@
+```
+SPDX-License-Identifier: Apache-2.0
+Copyright (c) 2019-2020 Intel Corporation
+```
+# Release Notes
+This document provides high level features, issues and limitation for the Edge Multi-Cluster Orchestration (EMCO) project.
+
+# Release History
+1. EMCO - 20.12
+# Features for Release
+1. EMCO - 20.12
+ - This is the first release of the Edge Multi-Cluster Orchestration (EMCO) project. EMCO supports the automated deployment of geo-distributed applications to multiple clusters via an intent driven API.
+ - EMCO is composed of a number of central microservices:
+ - Cluster Manager (clm) : onboard clusters into EMCO
+ - Network Configuration Manager (ncm) : define and apply provider and virtual network intents to clusters which required additional network interfaces for workloads, such as Virtual Network Functions. Support for OVN4NVF networks is present.
+ - Distributed Cloud Manager (dcm) : define and instantiate logical clouds which provide a common namespace across a set of clusters to which applications may be deployed
+ - Distributed Application Scheduler (orchestrator) : supports creation of composite applications via onboarding of Helm charts and customization and automation of deployment via support for placement and action controllers.
+ - OVN Action Controller (ovnaction) : action controller which supports creation of network interface intents which automates the addition of OVN4NFV network interfaces connected to provider or vitual networks to specified applications during deployment.
+ - Traffic Controller (dtc) : action controller which supports creation of network policy intents which will deploy network policy resources to the specified clusters of the application.
+ - Generic Action Controller (gac) : action controller which supports creation of intents which allow for the creation of additional Kubernetes resources for some or all of the clusters where an application is deployed. Also it supports intents to modify Kubernetes objects which are already part of the application.
+ - Resource Synchronizer (rsync) : handles instantiation, termination and status collection of the resources prepared by the other EMCO microservices to the remote clusters.
+
+ - EMCO provides a microservice for the remote clusters:
+ - Monitor (monitor) : collects and aggregates status of supported Kubernetes resources that have been deployed by EMCO. EMCO rsync watches for updates and collects the status information.
+
+ - EMCO provides a CLI tool (emcoctl) which may be used to interact with the EMCO REST APIs.
+ - Authorization and Authentication may be provided for EMCO by utilizing Istio. See [Emco Integrity Access Management](docs/user/Emco_Integrity_Access_Management.md) for more details.
+
+# Known Issues and Limitations
+- **EMCO 20.12**
+ - EMCO provides a simple Helm chart to deploy EMCO microservices under `deployments/helm/emcoCI`. This Helm chart supports limited scoped user authentication to the EMCO Mongo and etcd databases. The comprehensive Helm charts under `deployments/helm/emcoOpenNESS` are still a work in progress and will include the authentication and full integration with EMCO microservices in a future release.
+ - Many of the EMCO microservice REST APIs do not support the PUT API for providing modifications to resources after initial creation.
+ - The `emcoctl` command line tool does not support a `put` operation at all.
+ - In some cases, EMCO does not prevent deletion of API resources which are depended on by other resources. For example, a Cluster resource might be deleted while a Deployment Intent Group is instantiated and has resources deployed to the Cluster. Until this issue is addressed in the next release, the best method is to ensure that resources are deleted in the reverse order from their creation.
+ - EMCO does not provide for encryption-at-rest for the database storage of the Mongo and etcd databases. EMCO plans to provide support for encryption of critical database resources in an upcoming release.
+ - The example virtual firewall composite application needs to be deployed to a Kubernetes cluster which has Multus, OVN4K8S CNI and virtlet support installed. Refer to [KUD](https://github.com/onap/multicloud-k8s/tree/master/kud) for an example cluster that which supports the requirement needed by the virtual firewall example.
+ - The monitor microservice is only able to monitor the status of a limited set of Kubernetes resource Kinds: pod, service, configmap, deployment, secret, deamonset, ingress, jobs, statefulset, csrstatus
+ - Emcoctl get with token doesn't work. That is because of a bug in the code. Solution to the issue is to remove line 25 from the EMCO/src/emcoctl/cmd/get.go and rebuild emcoctl code.
+
+# Software Compatibility
+EMCO has been tested with Kubernetes v1.18.9 and v1.19.
diff --git a/build/docker/Dockerfile.build-base b/build/docker/Dockerfile.build-base
new file mode 100644
index 0000000..1343f95
--- /dev/null
+++ b/build/docker/Dockerfile.build-base
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG HTTP_PROXY
+ARG HTTPS_PROXY
+FROM ${EMCODOCKERREPO}golang:1.14.1-alpine
+
+ENV HTTP_PROXY=${HTTP_PROXY}
+ENV HTTPS_PROXY=${HTTPS_PROXY}
+
+# Install some run-time build tools in the container.
+RUN apk update \
+ && apk add --no-cache make
\ No newline at end of file
diff --git a/build/docker/Dockerfile.clm b/build/docker/Dockerfile.clm
new file mode 100644
index 0000000..31c9cd1
--- /dev/null
+++ b/build/docker/Dockerfile.clm
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/clm
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./clm ./
+COPY --chown=emco ./config.json ./
+COPY --chown=emco ./json-schemas ./json-schemas
+
+USER emco
+
+ENTRYPOINT ["./clm"]
diff --git a/build/docker/Dockerfile.dcm b/build/docker/Dockerfile.dcm
new file mode 100644
index 0000000..7dde349
--- /dev/null
+++ b/build/docker/Dockerfile.dcm
@@ -0,0 +1,19 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/dcm
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./dcm ./
+COPY --chown=emco ./config.json ./
+
+USER emco
+
+ENTRYPOINT ["./dcm"]
\ No newline at end of file
diff --git a/build/docker/Dockerfile.dtc b/build/docker/Dockerfile.dtc
new file mode 100644
index 0000000..b1c6468
--- /dev/null
+++ b/build/docker/Dockerfile.dtc
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/dtc
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./dtc ./
+COPY --chown=emco ./config.json ./
+COPY --chown=emco ./json-schemas ./json-schemas
+
+USER emco
+
+ENTRYPOINT ["./dtc"]
diff --git a/build/docker/Dockerfile.gac b/build/docker/Dockerfile.gac
new file mode 100644
index 0000000..80256c9
--- /dev/null
+++ b/build/docker/Dockerfile.gac
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/gac
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./genericactioncontroller ./
+COPY --chown=emco ./config.json ./
+COPY --chown=emco ./json-schemas ./json-schemas
+
+USER emco
+
+ENTRYPOINT ["./genericactioncontroller"]
\ No newline at end of file
diff --git a/build/docker/Dockerfile.monitor b/build/docker/Dockerfile.monitor
new file mode 100644
index 0000000..b020852
--- /dev/null
+++ b/build/docker/Dockerfile.monitor
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/monitor
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./monitor ./
+
+USER emco
+
+ENTRYPOINT ["./monitor"]
diff --git a/build/docker/Dockerfile.ncm b/build/docker/Dockerfile.ncm
new file mode 100644
index 0000000..4008a9b
--- /dev/null
+++ b/build/docker/Dockerfile.ncm
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/ncm
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./ncm ./
+COPY --chown=emco ./config.json ./
+COPY --chown=emco ./json-schemas ./json-schemas
+
+USER emco
+
+ENTRYPOINT ["./ncm"]
diff --git a/build/docker/Dockerfile.orchestrator b/build/docker/Dockerfile.orchestrator
new file mode 100644
index 0000000..7549b93
--- /dev/null
+++ b/build/docker/Dockerfile.orchestrator
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/orchestrator
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./orchestrator ./
+COPY --chown=emco ./config.json ./
+COPY --chown=emco ./json-schemas ./json-schemas
+
+USER emco
+
+ENTRYPOINT ["./orchestrator"]
\ No newline at end of file
diff --git a/build/docker/Dockerfile.ovn b/build/docker/Dockerfile.ovn
new file mode 100644
index 0000000..5705c83
--- /dev/null
+++ b/build/docker/Dockerfile.ovn
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/ovnaction
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./ovnaction ./
+COPY --chown=emco ./config.json ./
+COPY --chown=emco ./json-schemas ./json-schemas
+
+USER emco
+
+ENTRYPOINT ["./ovnaction"]
\ No newline at end of file
diff --git a/build/docker/Dockerfile.rsync b/build/docker/Dockerfile.rsync
new file mode 100644
index 0000000..28453df
--- /dev/null
+++ b/build/docker/Dockerfile.rsync
@@ -0,0 +1,19 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+ARG EMCODOCKERREPO
+ARG SERVICE_BASE_IMAGE_NAME
+ARG SERVICE_BASE_IMAGE_VERSION
+FROM ${EMCODOCKERREPO}${SERVICE_BASE_IMAGE_NAME}${SERVICE_BASE_IMAGE_VERSION}
+
+WORKDIR /opt/emco/rsync
+
+RUN addgroup -S emco && adduser -S -G emco emco
+RUN chown emco:emco . -R
+
+COPY --chown=emco ./rsync ./
+COPY --chown=emco ./config.json ./
+
+USER emco
+
+ENTRYPOINT ["./rsync"]
\ No newline at end of file
diff --git a/build/entrypoint b/build/entrypoint
new file mode 100755
index 0000000..66bf791
--- /dev/null
+++ b/build/entrypoint
@@ -0,0 +1,41 @@
+#!/bin/sh -e
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+cmd=${1:-""}
+
+case ${cmd} in
+ "orchestrator")
+ ./orchestrator
+ ;;
+
+ "ncm")
+ ./ncm
+ ;;
+
+ "dcm")
+ ./dcm
+ ;;
+
+ "rsync")
+ ./rsync
+ ;;
+
+ "ovnaction")
+ ./ovnaction
+ ;;
+
+ "dtc")
+ ./dtc
+ ;;
+
+ "clm")
+ ./clm
+ ;;
+
+ *)
+ echo "invalid command ${cmd}"
+ sleep infinity
+
+esac
+
diff --git a/config/config.txt b/config/config.txt
new file mode 100644
index 0000000..4e4e43b
--- /dev/null
+++ b/config/config.txt
@@ -0,0 +1,4 @@
+BUILD_BASE_IMAGE_NAME=emco-service-build-base
+BUILD_BASE_IMAGE_VERSION=:1.1
+SERVICE_BASE_IMAGE_NAME=alpine
+SERVICE_BASE_IMAGE_VERSION=:3.12
\ No newline at end of file
diff --git a/deployments/docker/.env b/deployments/docker/.env
new file mode 100644
index 0000000..cc00eec
--- /dev/null
+++ b/deployments/docker/.env
@@ -0,0 +1,5 @@
+REGISTRY_PREFIX=
+TAG=:latest
+NO_PROXY=localhost,127.0.0.1,0.0.0.0
+HTTP_PROXY=
+HTTPS_PROXY=
diff --git a/deployments/docker/Tutorial_Local_Install.md b/deployments/docker/Tutorial_Local_Install.md
new file mode 120000
index 0000000..89d2d64
--- /dev/null
+++ b/deployments/docker/Tutorial_Local_Install.md
@@ -0,0 +1 @@
+../../docs/user/Tutorial_Local_Install.md
\ No newline at end of file
diff --git a/deployments/docker/docker-compose.yml b/deployments/docker/docker-compose.yml
new file mode 100644
index 0000000..7a49366
--- /dev/null
+++ b/deployments/docker/docker-compose.yml
@@ -0,0 +1,167 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+# This is the docker-compose.yml file used for running all the EMCO microservices on local machine
+version: '3.7'
+networks:
+ emconet:
+ driver: bridge
+ name: emconet
+services:
+ dcm:
+ image: ${REGISTRY_PREFIX}emco-dcm${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9077:9077
+ environment:
+ - no_proxy=etcd,mongo,rsync,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,rsync,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ etcd:
+ image: ${EMCODOCKERREPO}etcd:3
+ networks:
+ - emconet
+ ports:
+ - 2379:2379
+ - 2380:2380
+ environment:
+ - ALLOW_NONE_AUTHENTICATION=yes
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ volumes:
+ - /etcd-data:/etcd-data
+ mongo:
+ image: ${EMCODOCKERREPO}mongo:4.4.1
+ networks:
+ - emconet
+ ports:
+ - 27017:27017
+ environment:
+ - no_proxy=orchestrator,ovnaction,${NO_PROXY}
+ - NO_PROXY=orchestrator,ovnaction,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ clm:
+ image: ${REGISTRY_PREFIX}emco-clm${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9061:9061
+ environment:
+ - no_proxy=etcd,mongo,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ ncm:
+ image: ${REGISTRY_PREFIX}emco-ncm${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9081:9081
+ environment:
+ - no_proxy=etcd,mongo,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ orchestrator:
+ image: ${REGISTRY_PREFIX}emco-orch${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9015:9015
+ environment:
+ - no_proxy=etcd,mongo,rsync,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,rsync,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ ovnaction:
+ image: ${REGISTRY_PREFIX}emco-ovn${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9051:9051
+ environment:
+ - no_proxy=etcd,mongo,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ dtc:
+ image: ${REGISTRY_PREFIX}emco-dtc${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9018:9018
+ environment:
+ - no_proxy=etcd,mongo,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ genericactioncontroller:
+ image: ${REGISTRY_PREFIX}emco-gac${TAG}
+ networks:
+ - emconet
+ ports:
+ - 9020:9020
+ environment:
+ - no_proxy=etcd,mongo,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
+ rsync:
+ image: ${REGISTRY_PREFIX}emco-rsync${TAG}
+ networks:
+ - emconet
+ expose:
+ - "9031"
+ ports:
+ - 9031:9031
+ environment:
+ - no_proxy=etcd,mongo,${NO_PROXY}
+ - NO_PROXY=etcd,mongo,${NO_PROXY}
+ - HTTP_PROXY=${HTTP_PROXY}
+ - http_proxy=${HTTP_PROXY}
+ - HTTPS_PROXY=${HTTPS_PROXY}
+ - https_proxy=${HTTPS_PROXY}
+ depends_on:
+ - "etcd"
+ - "mongo"
\ No newline at end of file
diff --git a/deployments/helm/Tutorial_Helm.md b/deployments/helm/Tutorial_Helm.md
new file mode 120000
index 0000000..0628afe
--- /dev/null
+++ b/deployments/helm/Tutorial_Helm.md
@@ -0,0 +1 @@
+../../docs/user/Tutorial_Helm.md
\ No newline at end of file
diff --git a/deployments/helm/emco-helm-install.sh b/deployments/helm/emco-helm-install.sh
new file mode 100644
index 0000000..7d8bbc2
--- /dev/null
+++ b/deployments/helm/emco-helm-install.sh
@@ -0,0 +1,69 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+#-------- DO NOT EDIT THIS FILE ---------#
+#!/bin/sh
+usage() {
+ echo "USAGE:" $0 " > [install | uninstall]"
+ echo "NOTES: multiple instances of <-s parameter=value> may be provided"
+}
+
+EMCO_HELM_FILE="emco-helm.tgz"
+
+install() {
+ echo "Creating namespace emco"
+ kubectl ${KUBCFG} create ns emco
+ echo "Installing EMCO. Please wait..."
+ helm ${KUBCFG} install --namespace=emco -f helm_value_overrides.yaml ${HELMSETVALUES} --wait emco ${EMCO_HELM_FILE}
+ if [ "$?" -ne "0" ]; then
+ echo "Deleting namespace emco"
+ kubectl ${KUBCFG} delete ns emco
+ fi
+ echo "Done"
+}
+
+uninstall() {
+ echo "Removing EMCO..."
+ helm ${KUBCFG} uninstall --namespace=emco emco
+ echo "Deleting namespace emco"
+ kubectl ${KUBCFG} delete ns emco
+ echo "Done"
+}
+
+KUBCFG=""
+HELMSETVALUES=""
+while getopts "hs:k:" opt; do
+ case $opt in
+ s)
+ HELMSETVALUES=${HELMSETVALUES}" --set $OPTARG"
+ ;;
+ k)
+ KUBCFG="--kubeconfig="$OPTARG
+ ;;
+ h)
+ usage
+ exit 0
+ ;;
+ \?)
+ echo "Invalid option: -$OPTARG" >&2
+ usage
+ exit 1
+ ;;
+ :)
+ echo "Option -$OPTARG requires an argument." >&2
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+shift $((OPTIND -1))
+
+if [ "$1" = "install" ]; then
+ install
+elif [ "$1" = "uninstall" ]; then
+ uninstall
+else
+ echo "Not a valid command: "$2
+ exit 2
+fi
+exit 0
diff --git a/deployments/helm/emcoCI/Chart.yaml b/deployments/helm/emcoCI/Chart.yaml
new file mode 100644
index 0000000..b56cd7f
--- /dev/null
+++ b/deployments/helm/emcoCI/Chart.yaml
@@ -0,0 +1,25 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: v2
+name: emco
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+appVersion: 1.16.0
diff --git a/deployments/helm/emcoCI/templates/configmap.yaml b/deployments/helm/emcoCI/templates/configmap.yaml
new file mode 100644
index 0000000..fb9b24c
--- /dev/null
+++ b/deployments/helm/emcoCI/templates/configmap.yaml
@@ -0,0 +1,193 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+# Orchestrator Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: orchestrator
+ labels:
+ app: orchestrator
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9015"
+ }
+
+---
+
+# NCM Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: ncm
+ labels:
+ app: ncm
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9081"
+ }
+
+---
+
+# RSYNC ConfigMap
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: rsync
+ labels:
+ app: rsync
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd"
+ }
+
+---
+
+# Ovnaction Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: ovnaction
+ labels:
+ app: ovnaction
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9051"
+ }
+
+---
+
+# Clm Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: clm
+ labels:
+ app: clm
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9061"
+ }
+
+---
+
+# DCM Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: dcm
+ labels:
+ app: dcm
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9077"
+ }
+
+---
+
+# DTC Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: dtc
+ labels:
+ app: dtc
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9018"
+ }
+
+---
+
+# GenericActionController Config Map
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: gac
+ labels:
+ app: gac
+data:
+ config.json: |
+ {
+ "database-type": "mongo",
+ "database-ip": "mongo",
+ "etcd-ip": "etcd",
+ "service-port": "9020"
+ }
+
+
+{{- if eq .Values.enableDbAuth true }}
+---
+
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: mongo-init
+ labels:
+ app: mongo
+data:
+ mongo-user.sh: |
+ mongo -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_PASSWORD" <
+ emcoUser: emco
+# emcoPassword:
+contextdb:
+ rootUser: root
+# rootPassword:
+ emcoUser: emco
+# emcoPassword:
diff --git a/deployments/helm/emcoOpenNESS/Chart.yaml b/deployments/helm/emcoOpenNESS/Chart.yaml
new file mode 100644
index 0000000..9c01581
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/Chart.yaml
@@ -0,0 +1,5 @@
+apiVersion: v1
+appVersion: "1.0"
+description: A Helm chart for Kubernetes
+name: emco
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/Makefile b/deployments/helm/emcoOpenNESS/Makefile
new file mode 100644
index 0000000..355fc3f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/Makefile
@@ -0,0 +1,68 @@
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+PARENT_CHART := emco
+COMMON_CHARTS_DIR := common
+ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+OUTPUT_DIR := $(ROOT_DIR)/dist
+PACKAGE_DIR := $(OUTPUT_DIR)/packages
+SECRET_DIR := $(OUTPUT_DIR)/secrets
+
+EXCLUDES := $(PARENT_CHART) dist jaeger-operator emco-db emco-tools emco-services
+HELM_CHARTS := $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.)))
+ADDITIONAL_BUNDLES := emco-db emco-tools emco-services
+BUNDLE := emco
+
+.PHONY: $(EXCLUDES) $(HELM_CHARTS) $(ADDITIONAL_BUNDLES) $(PARENT_CHART)
+
+all: $(COMMON_CHARTS_DIR) $(HELM_CHARTS) $(ADDITIONAL_BUNDLES) $(PARENT_CHART)
+
+$(COMMON_CHARTS):
+ @echo "\n[$@]"
+ @make package-$@
+
+$(PARENT_CHART):
+ @echo "\n[$@]"
+ @make package-$@
+
+$(ADDITIONAL_BUNDLES):
+ @echo "\n[$@]"
+ @make package-$@
+
+$(HELM_CHARTS):
+ @echo "\n[$@]"
+ @make package-$@
+
+make-%:
+ @if [ -f $*/Makefile ]; then make -C $*; fi
+
+dep-%: make-%
+ @if [ -f $*/requirements.yaml ]; then helm dep up $*; fi
+
+lint-%: dep-%
+ @if [ -f $*/Chart.yaml ]; then helm lint $*; fi
+
+package-%: lint-%
+ @mkdir -p $(PACKAGE_DIR)
+ @if [ -f $*/Chart.yaml ]; then helm package -d $(PACKAGE_DIR) $*; fi
+ @helm repo index $(PACKAGE_DIR)
+
+clean:
+ @rm -f */requirements.lock
+ @find . -type f -name '*.tgz' -delete
+ @rm -rf $(PACKAGE_DIR)/*
+ @rm -rf $(OUTPUT_DIR)
+
+%:
+ @:
diff --git a/deployments/helm/emcoOpenNESS/README.md b/deployments/helm/emcoOpenNESS/README.md
new file mode 100644
index 0000000..6870bcf
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/README.md
@@ -0,0 +1,69 @@
+#################################################################
+# EMCO v2 helm charts
+#################################################################
+
+EMCO Helm charts include charts for EMCO microservices along with MongoDb, etcd, Fluentd
+
+Make sure to add the correct repository name in values.yaml of each component with correct image:tag
+
+### Steps to generate and install packages
+**1. Run make file to package all the required chart**
+
+`$ make clean`
+
+`$ make all`
+
+Pacakges helm charts in tar.gz format. All packages are in **dist/packages** directory and the package of intrest are:
+
+ File | Description |
+ | ----------- | ----------- |
+ | **emco-db-0.1.0.tgz** | Includes database packages for mongo & etcd |
+ | **emco-services-0.1.0.tgz** | Includes packages for all EMCO services like orchestrator, ncm, rsync etc |
+ | **emco-tools-0.1.0.tgz** | Tools like Fluentd to be used with EMCO |
+ | **emco-0.1.0.tgz** | Includes all charts including database, all services and tools |
+
+
+**2. Deploy EMCO Packages for Databases and Services**
+
+`$ helm install --namespace emco emco-db./dist/packages/emco-db-0.1.0.tgz `
+
+`$ helm install --namespace emco emco-services ./dist/packages/emco-services-0.1.0.tgz `
+
+**3. Deploy tools (Optional)**
+
+`$ helm install --namespace emco emco-tools ./dist/packages/emco-tools-0.1.0.tgz `
+
+NOTE: Deploy the Chart emco-0.1.0.tgz to deploy all packages including database, services and tools.
+
+`$ helm install --namespace emco emco ./dist/packages/emco-0.1.0.tgz `
+
+
+**4. To check logs of the different Microservices check fluentd logs**
+
+`kubectl logs emco-tools-fluentd-0 -n emco | grep orchestrator`
+
+
+**5. Delete all packages**
+
+`$ helm delete emco-services --purge`
+
+`$ helm delete emco-db --purge`
+
+Optional if tools were installed
+
+`$ helm delete emco-tools --purge`
+
+NOTE: If the Chart emco-0.1.0.tgz was deployed
+
+`$ helm delete emco --purge`
+
+### Known Issues
+
+After deleting the db package and before installing the package again following error happens:
+
+`Error: release emco-db failed: object is being deleted: persistentvolumes "emco-db-emco-etcd-data-0" already exists`
+
+Workarounds:
+
+* remove the finalizers section using `kubectl edit persistentvolumes emco-db-emco-etcd-data-0`
+* or, if appropriate, delete the entire namespace using `kubectl delete namespace emco`
diff --git a/deployments/helm/emcoOpenNESS/clm/Chart.yaml b/deployments/helm/emcoOpenNESS/clm/Chart.yaml
new file mode 100644
index 0000000..5c01e03
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Cluster Management
+name: clm
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/clm/requirements.yaml b/deployments/helm/emcoOpenNESS/clm/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/clm/resources/config/config.json b/deployments/helm/emcoOpenNESS/clm/resources/config/config.json
new file mode 100644
index 0000000..11d22f6
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/resources/config/config.json
@@ -0,0 +1,6 @@
+{
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9061"
+}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/clm/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/clm/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/clm/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/clm/templates/deployment.yaml
new file mode 100644
index 0000000..c3acae4
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/templates/deployment.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.deployment" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/clm/templates/service.yaml b/deployments/helm/emcoOpenNESS/clm/templates/service.yaml
new file mode 100644
index 0000000..8dc285f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/templates/service.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.servicemco" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/clm/values.yaml b/deployments/helm/emcoOpenNESS/clm/values.yaml
new file mode 100644
index 0000000..5361da8
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/clm/values.yaml
@@ -0,0 +1,74 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-clm:latest
+pullPolicy: Always
+command: "./clm"
+args: ""
+workingDir: /opt/emco/clm
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: clm
+ portName: clm
+ internalPort: 9061
+ externalPort: 9061
+ nodePort: 61
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/common/Chart.yaml b/deployments/helm/emcoOpenNESS/common/Chart.yaml
new file mode 100644
index 0000000..34ba55d
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/Chart.yaml
@@ -0,0 +1,18 @@
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+description: Common templates for inclusion in other charts
+name: common
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_deployment.tpl b/deployments/helm/emcoOpenNESS/common/templates/_deployment.tpl
new file mode 100644
index 0000000..c8c61f0
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_deployment.tpl
@@ -0,0 +1,82 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- define "common.deployment" -}}
+{{- $common := dict "Values" .Values.common -}}
+{{- $noCommon := omit .Values "common" -}}
+{{- $overrides := dict "Values" $noCommon -}}
+{{- $noValues := omit . "Values" -}}
+{{- with merge $noValues $overrides $common -}}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ selector:
+ matchLabels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ replicas: {{ .Values.replicaCount }}
+ template:
+ metadata:
+ labels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ spec:
+ containers:
+ - image: "{{ include "common.repository" . }}/{{ .Values.image }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ name: {{ include "common.name" . }}
+ command: [{{ .Values.command }}]
+ args: [{{ .Values.args }}]
+ workingDir: {{ .Values.workingDir }}
+ ports:
+ - containerPort: {{ .Values.service.internalPort }}
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ {{ end }}
+
+ readinessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readiness.periodSeconds }}
+ volumeMounts:
+ - mountPath: /etc/localtime
+ name: localtime
+ readOnly: true
+ - mountPath: {{ .Values.workingDir }}/config.json
+ name: {{ include "common.name" .}}
+ subPath: config.json
+ resources:
+{{ include "common.resources" . }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector }}
+ {{- end -}}
+ {{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity }}
+ {{- end }}
+ volumes:
+ - name: localtime
+ hostPath:
+ path: /etc/localtime
+ - name : {{ include "common.name" . }}
+ configMap:
+ name: {{ include "common.fullname" . }}
+ imagePullSecrets:
+ - name: "{{ include "common.namespace" . }}-docker-registry-key"
+{{- end -}}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_name.tpl b/deployments/helm/emcoOpenNESS/common/templates/_name.tpl
new file mode 100644
index 0000000..4299984
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_name.tpl
@@ -0,0 +1,31 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{/*
+ Expand the name of a chart.
+*/}}
+{{- define "common.name" -}}
+ {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+ Create a default fully qualified application name.
+ Truncated at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "common.fullname" -}}
+ {{- $name := default .Chart.Name .Values.nameOverride -}}
+ {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_namespace.tpl b/deployments/helm/emcoOpenNESS/common/templates/_namespace.tpl
new file mode 100644
index 0000000..94c9ee7
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_namespace.tpl
@@ -0,0 +1,26 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{/*
+ Resolve the namespace to apply to a chart. The default namespace suffix
+ is the name of the chart. This can be overridden if necessary (eg. for subcharts)
+ using the following value:
+
+ - .Values.nsPrefix : override namespace prefix
+*/}}
+{{- define "common.namespace" -}}
+ {{- default .Release.Namespace .Values.nsPrefix -}}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_repository.tpl b/deployments/helm/emcoOpenNESS/common/templates/_repository.tpl
new file mode 100644
index 0000000..272db42
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_repository.tpl
@@ -0,0 +1,49 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{/*
+ Resolve the name of the common image repository.
+ The value for .Values.repository is used by default,
+ unless either override mechanism is used.
+
+ - .Values.global.repository : override default image repository for all images
+ - .Values.repositoryOverride : override global and default image repository on a per image basis
+*/}}
+{{- define "common.repository" -}}
+ {{if .Values.repositoryOverride }}
+ {{- printf "%s" .Values.repositoryOverride -}}
+ {{else}}
+ {{- default .Values.repository .Values.global.repository -}}
+ {{end}}
+{{- end -}}
+
+
+{{/*
+ Resolve the image repository secret token.
+ The value for .Values.global.repositoryCred is used:
+ repositoryCred:
+ user: user
+ password: password
+ mail: email (optional)
+*/}}
+{{- define "common.repository.secret" -}}
+ {{- $repo := include "common.repository" . }}
+ {{- $repo := default "nexus3.onap.org:10001" $repo }}
+ {{- $cred := .Values.global.repositoryCred }}
+ {{- $mail := default "@" $cred.mail }}
+ {{- $auth := printf "%s:%s" $cred.user $cred.password | b64enc }}
+ {{- printf "{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}" $repo $cred.user $cred.password $mail $auth | b64enc -}}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_resources.tpl b/deployments/helm/emcoOpenNESS/common/templates/_resources.tpl
new file mode 100644
index 0000000..fae7743
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_resources.tpl
@@ -0,0 +1,59 @@
+{{- /*
+# Copyright © 2018 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/ -}}
+
+{{- /*
+ Resolve the name of the common resource limit/request flavor.
+ The value for .Values.flavor is used by default,
+ unless either override mechanism is used.
+
+ - .Values.global.flavor : override default flavor for all charts
+ - .Values.flavorOverride : override global and default flavor on a per chart basis
+*/ -}}
+{{- define "common.flavor" -}}
+ {{if .Values.flavorOverride }}
+ {{- printf "%s" .Values.flavorOverride -}}
+ {{else}}
+ {{- default .Values.flavor .Values.global.flavor -}}
+ {{end}}
+{{- end -}}
+
+{{- /*
+ Resolve the resource limit/request flavor using the desired flavor value.
+
+ - .Values.resources : YAML definition of resource limits. The flavor key
+ is computed based on the common.flavor template and
+ is used as the selected resource limit through the pluck
+ e.g: resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 4Gi
+ requests:
+ cpu: 100m
+ memory: 1Gi
+ large:
+ limits:
+ cpu: 400m
+ memory: 8Gi
+ requests:
+ cpu: 200m
+ memory: 2Gi
+ unlimited: {}
+*/ -}}
+{{- define "common.resources" -}}
+{{- $flavor := include "common.flavor" . -}}
+{{- toYaml (pluck $flavor .Values.resources | first) | indent 12 -}}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_service.tpl b/deployments/helm/emcoOpenNESS/common/templates/_service.tpl
new file mode 100644
index 0000000..77b77d0
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_service.tpl
@@ -0,0 +1,31 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{/*
+ Resolve the name of a chart's service.
+
+ The default will be the chart name (or .Values.nameOverride if set).
+ And the use of .Values.service.name overrides all.
+
+ - .Values.service.name : override default service (ie. chart) name
+*/}}
+{{/*
+ Expand the service name for a chart.
+*/}}
+{{- define "common.servicename" -}}
+ {{- $name := default .Chart.Name .Values.nameOverride -}}
+ {{- default $name .Values.service.name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/common/templates/_servicemco.tpl b/deployments/helm/emcoOpenNESS/common/templates/_servicemco.tpl
new file mode 100644
index 0000000..6efc0ac
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/templates/_servicemco.tpl
@@ -0,0 +1,37 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- define "common.servicemco" -}}
+{{- $common := dict "Values" .Values.common -}}
+{{- $noCommon := omit .Values "common" -}}
+{{- $overrides := dict "Values" $noCommon -}}
+{{- $noValues := omit . "Values" -}}
+{{- with merge $noValues $overrides $common -}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.fullname" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - name: {{ .Values.service.PortName }}
+ {{if eq .Values.service.type "NodePort" -}}
+ port: {{ .Values.service.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.service.nodePort }}
+ {{- else -}}
+ port: {{ .Values.service.externalPort }}
+ targetPort: {{ .Values.service.internalPort }}
+ {{- end}}
+ protocol: TCP
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+{{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/common/values.yaml b/deployments/helm/emcoOpenNESS/common/values.yaml
new file mode 100644
index 0000000..852f15c
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/common/values.yaml
@@ -0,0 +1,18 @@
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#################################################################
+# Global configuration default values that can be inherited by
+# all subcharts.
+#################################################################
diff --git a/deployments/helm/emcoOpenNESS/dcm/Chart.yaml b/deployments/helm/emcoOpenNESS/dcm/Chart.yaml
new file mode 100644
index 0000000..58f3b85
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Distributed Cloud Manager
+name: dcm
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/dcm/requirements.yaml b/deployments/helm/emcoOpenNESS/dcm/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/dcm/resources/config/config.json b/deployments/helm/emcoOpenNESS/dcm/resources/config/config.json
new file mode 100644
index 0000000..7478656
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/resources/config/config.json
@@ -0,0 +1,8 @@
+{
+
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9077"
+}
+
diff --git a/deployments/helm/emcoOpenNESS/dcm/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/dcm/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/dcm/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/dcm/templates/deployment.yaml
new file mode 100644
index 0000000..c3acae4
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/templates/deployment.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.deployment" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/dcm/templates/service.yaml b/deployments/helm/emcoOpenNESS/dcm/templates/service.yaml
new file mode 100644
index 0000000..8dc285f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/templates/service.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.servicemco" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/dcm/values.yaml b/deployments/helm/emcoOpenNESS/dcm/values.yaml
new file mode 100644
index 0000000..246101b
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dcm/values.yaml
@@ -0,0 +1,73 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-dcm:latest
+pullPolicy: Always
+command: "./dcm"
+args: ""
+workingDir: /opt/emco/dcm
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: dcm
+ portName: dcm
+ internalPort: 9077
+ externalPort: 9077
+ nodePort: 77
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/dtc/Chart.yaml b/deployments/helm/emcoOpenNESS/dtc/Chart.yaml
new file mode 100644
index 0000000..470bb7b
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Distributed Traffic Controller
+name: dtc
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/dtc/requirements.yaml b/deployments/helm/emcoOpenNESS/dtc/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/dtc/resources/config/config.json b/deployments/helm/emcoOpenNESS/dtc/resources/config/config.json
new file mode 100644
index 0000000..4ca473d
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/resources/config/config.json
@@ -0,0 +1,6 @@
+{
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9018"
+}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/dtc/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/dtc/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/dtc/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/dtc/templates/deployment.yaml
new file mode 100644
index 0000000..1e56812
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/templates/deployment.yaml
@@ -0,0 +1,74 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ selector:
+ matchLabels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ replicas: {{ .Values.replicaCount }}
+ template:
+ metadata:
+ labels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ spec:
+ containers:
+ - image: "{{ include "common.repository" . }}/{{ .Values.image }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ name: {{ include "common.name" . }}
+ command: [{{ .Values.command }}]
+ args: [{{ .Values.args }}]
+ workingDir: {{ .Values.workingDir }}
+ ports:
+ - containerPort: {{ .Values.serviceInternal.internalPort }}
+ - containerPort: {{ .Values.service.internalPort }}
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ {{ end }}
+ readinessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readiness.periodSeconds }}
+ volumeMounts:
+ - mountPath: /etc/localtime
+ name: localtime
+ readOnly: true
+ - mountPath: {{ .Values.workingDir }}/config.json
+ name: {{ include "common.name" .}}
+ subPath: config.json
+ resources:
+{{ include "common.resources" . }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector }}
+ {{- end -}}
+ {{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity }}
+ {{- end }}
+ volumes:
+ - name: localtime
+ hostPath:
+ path: /etc/localtime
+ - name : {{ include "common.name" . }}
+ configMap:
+ name: {{ include "common.fullname" . }}
+ imagePullSecrets:
+ - name: "{{ include "common.namespace" . }}-docker-registry-key"
diff --git a/deployments/helm/emcoOpenNESS/dtc/templates/service.yaml b/deployments/helm/emcoOpenNESS/dtc/templates/service.yaml
new file mode 100644
index 0000000..afc8239
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/templates/service.yaml
@@ -0,0 +1,38 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.fullname" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - name: {{ .Values.serviceInternal.portName }}
+ {{if eq .Values.serviceInternal.type "NodePort" -}}
+ port: {{ .Values.serviceInternal.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.serviceInternal.nodePort }}
+ {{- else -}}
+ port: {{ .Values.serviceInternal.externalPort }}
+ targetPort: {{ .Values.serviceInternal.internalPort }}
+ {{- end}}
+ protocol: TCP
+ - name: {{ .Values.service.portName }}
+ {{if eq .Values.service.type "NodePort" -}}
+ port: {{ .Values.service.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.service.nodePort }}
+ {{- else -}}
+ port: {{ .Values.service.externalPort }}
+ targetPort: {{ .Values.service.internalPort }}
+ {{- end}}
+ protocol: TCP
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/dtc/values.yaml b/deployments/helm/emcoOpenNESS/dtc/values.yaml
new file mode 100644
index 0000000..aea0025
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/dtc/values.yaml
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-dtc:latest
+pullPolicy: Always
+command: "./dtc"
+args: ""
+workingDir: /opt/emco/dtc
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: dtc
+ portName: http
+ internalPort: 9018
+ externalPort: 9018
+ nodePort: 81
+
+serviceInternal:
+ type: NodePort
+ name: internal
+ portName: internal
+ internalPort: 9048
+ externalPort: 9048
+ nodePort: 83
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/emco-db/Chart.yaml b/deployments/helm/emcoOpenNESS/emco-db/Chart.yaml
new file mode 100644
index 0000000..5d3610c
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-db/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Multicluster Edge Orchestrator Databases Package
+name: emco-db
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/emco-db/requirements.yaml b/deployments/helm/emcoOpenNESS/emco-db/requirements.yaml
new file mode 100644
index 0000000..1f46d0f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-db/requirements.yaml
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
+ - name: mongo
+ version: ~4.x-0
+ repository: 'file://../mongo'
+ - name: etcd
+ version: ~3.x-0
+ repository: 'file://../etcd'
diff --git a/deployments/helm/emcoOpenNESS/emco-db/values.yaml b/deployments/helm/emcoOpenNESS/emco-db/values.yaml
new file mode 100644
index 0000000..82d9946
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-db/values.yaml
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+#Mongo chart overrides for emco
+mongo:
+ nameOverride: emco-mongo
+ service:
+ name: emco-mongo
+ internalPort: 27017
+ nfsprovisionerPrefix: emco
+ sdnctlPrefix: emco
+ persistence:
+ mountSubPath: emco/mongo/data
+ enabled: true
+ disableNfsProvisioner: true
+
+#etcd chart overrides for k8splugin
+etcd:
+ nameOverride: emco-etcd
+ service:
+ name: emco-etcd
+ persistence:
+ mountSubPath: emco/etcd/data
+ enabled: true
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/emco-services/Chart.yaml b/deployments/helm/emcoOpenNESS/emco-services/Chart.yaml
new file mode 100644
index 0000000..d8fb6cd
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-services/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Multicluster Edge Orchestrator Services Package
+name: emco-services
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/emco-services/requirements.yaml b/deployments/helm/emcoOpenNESS/emco-services/requirements.yaml
new file mode 100644
index 0000000..75c8de1
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-services/requirements.yaml
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
+ - name: orchestrator
+ version: ~0.x-0
+ repository: 'file://../orchestrator'
+ - name: ncm
+ version: ~0.x-0
+ repository: 'file://../ncm'
+ - name: rsync
+ version: ~0.x-0
+ repository: 'file://../rsync'
+ - name: clm
+ version: ~0.x-0
+ repository: 'file://../clm'
+ - name: ovnaction
+ version: ~0.x-0
+ repository: 'file://../ovnaction'
+ - name: dcm
+ version: ~0.x-0
+ repository: 'file://../dcm'
+ - name: dtc
+ version: ~0.x-0
+ repository: 'file://../dtc'
+ - name: gac
+ version: ~0.x-0
+ repository: 'file://../gac'
diff --git a/deployments/helm/emcoOpenNESS/emco-services/values.yaml b/deployments/helm/emcoOpenNESS/emco-services/values.yaml
new file mode 100644
index 0000000..82d9946
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-services/values.yaml
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+#Mongo chart overrides for emco
+mongo:
+ nameOverride: emco-mongo
+ service:
+ name: emco-mongo
+ internalPort: 27017
+ nfsprovisionerPrefix: emco
+ sdnctlPrefix: emco
+ persistence:
+ mountSubPath: emco/mongo/data
+ enabled: true
+ disableNfsProvisioner: true
+
+#etcd chart overrides for k8splugin
+etcd:
+ nameOverride: emco-etcd
+ service:
+ name: emco-etcd
+ persistence:
+ mountSubPath: emco/etcd/data
+ enabled: true
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/emco-tools/Chart.yaml b/deployments/helm/emcoOpenNESS/emco-tools/Chart.yaml
new file mode 100644
index 0000000..7cc5aa8
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-tools/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Multicluster Edge Orchestrator Tools Package
+name: emco-tools
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/emco-tools/requirements.yaml b/deployments/helm/emcoOpenNESS/emco-tools/requirements.yaml
new file mode 100644
index 0000000..8a9bc51
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-tools/requirements.yaml
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
+ - name: fluentd
+ version: ~1.x-0
+ repository: 'file://../fluentd'
diff --git a/deployments/helm/emcoOpenNESS/emco-tools/values.yaml b/deployments/helm/emcoOpenNESS/emco-tools/values.yaml
new file mode 100644
index 0000000..82d9946
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco-tools/values.yaml
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+#Mongo chart overrides for emco
+mongo:
+ nameOverride: emco-mongo
+ service:
+ name: emco-mongo
+ internalPort: 27017
+ nfsprovisionerPrefix: emco
+ sdnctlPrefix: emco
+ persistence:
+ mountSubPath: emco/mongo/data
+ enabled: true
+ disableNfsProvisioner: true
+
+#etcd chart overrides for k8splugin
+etcd:
+ nameOverride: emco-etcd
+ service:
+ name: emco-etcd
+ persistence:
+ mountSubPath: emco/etcd/data
+ enabled: true
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/emco/Chart.yaml b/deployments/helm/emcoOpenNESS/emco/Chart.yaml
new file mode 100644
index 0000000..24c1275
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Multicluster Edge Orchestrator
+name: emco
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/emco/requirements.yaml b/deployments/helm/emcoOpenNESS/emco/requirements.yaml
new file mode 100644
index 0000000..06cbe18
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco/requirements.yaml
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: emco-db
+ version: ~0.x-0
+ repository: 'file://../emco-db'
+ - name: emco-tools
+ version: ~0.x-0
+ repository: 'file://../emco-tools'
+ - name: emco-services
+ version: ~0.x-0
+ repository: 'file://../emco-services'
+
diff --git a/deployments/helm/emcoOpenNESS/emco/values.yaml b/deployments/helm/emcoOpenNESS/emco/values.yaml
new file mode 100644
index 0000000..440b7cc
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/emco/values.yaml
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
diff --git a/deployments/helm/emcoOpenNESS/etcd/Chart.yaml b/deployments/helm/emcoOpenNESS/etcd/Chart.yaml
new file mode 100644
index 0000000..22f8f9d
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/etcd/Chart.yaml
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+name: etcd
+home: https://github.com/coreos/etcd
+version: 3.2.26
+appVersion: 2.2.5
+description: Distributed reliable key-value store for the most critical data of a
+ distributed system.
+-icon: https://raw.githubusercontent.com/coreos/etcd/master/logos/etcd-horizontal-color.png
+sources:
+- https://github.com/coreos/etcd
diff --git a/deployments/helm/emcoOpenNESS/etcd/requirements.yaml b/deployments/helm/emcoOpenNESS/etcd/requirements.yaml
new file mode 100644
index 0000000..9802dac
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/etcd/requirements.yaml
@@ -0,0 +1,18 @@
+# Copyright © 2017 Amdocs, Bell Canada
+# Modifications Copyright © 2018 Orange
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/etcd/templates/pv.yaml b/deployments/helm/emcoOpenNESS/etcd/templates/pv.yaml
new file mode 100644
index 0000000..f0cf59c
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/etcd/templates/pv.yaml
@@ -0,0 +1,27 @@
+{{ if .Values.persistence.enabled }}
+{{- $root := . -}}
+{{ range $i, $e := until (int $root.Values.replicaCount) }}
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: {{ include "common.fullname" $root }}-data-{{ $i }}
+ namespace: {{ $root.Release.Namespace }}
+ labels:
+ type: {{ $root.Values.persistence.storageType }}
+ app: {{ include "common.fullname" $root }}
+ chart: {{ $root.Chart.Name }}-{{ $root.Chart.Version | replace "+" "_" }}
+ release: {{ $root.Release.Name }}
+ heritage: {{ $root.Release.Service }}
+spec:
+ capacity:
+ storage: {{ $root.Values.persistence.storage }}
+ accessModes:
+ - {{ $root.Values.persistence.accessMode }}
+ storageClassName: "{{ include "common.fullname" $root }}-data"
+ hostPath:
+ path: {{ $root.Values.persistence.mountPath }}/{{ $root.Release.Name }}/{{ $root.Values.persistence.mountSubPath }}-{{ $i }}
+ persistentVolumeReclaimPolicy: {{ $root.Values.persistence.volumeReclaimPolicy }}
+{{ end }}
+{{ end }}
+
diff --git a/deployments/helm/emcoOpenNESS/etcd/templates/service.yaml b/deployments/helm/emcoOpenNESS/etcd/templates/service.yaml
new file mode 100644
index 0000000..bb608de
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/etcd/templates/service.yaml
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+kind: Service
+metadata:
+ annotations:
+ service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
+metadata:
+ name: {{ include "common.servicename" . }}
+ labels:
+ heritage: "{{ .Release.Service }}"
+ release: "{{ .Release.Name }}"
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+ app: {{ include "common.name" . }}
+spec:
+ ports:
+ - name: {{ .Values.service.peerPortName }}
+ port: {{ .Values.service.peerInternalPort }}
+ - name: {{ .Values.service.clientPortName }}
+ port: {{ .Values.service.clientInternalPort }}
+ clusterIP: None
+ selector:
+ app: {{ include "common.name" . }}
+ release: "{{ .Release.Name }}"
+
diff --git a/deployments/helm/emcoOpenNESS/etcd/templates/statefulset.yaml b/deployments/helm/emcoOpenNESS/etcd/templates/statefulset.yaml
new file mode 100644
index 0000000..e1bb020
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/etcd/templates/statefulset.yaml
@@ -0,0 +1,225 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: {{ include "common.fullname" . }}
+ labels:
+ heritage: "{{ .Release.Service }}"
+ release: "{{ .Release.Name }}"
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+ app: {{ include "common.name" . }}
+spec:
+ serviceName: {{ include "common.servicename" .}}
+ replicas: {{ .Values.replicaCount }}
+ selector:
+ matchLabels:
+ release: "{{ .Release.Name }}"
+ app: {{ include "common.name" . }}
+ template:
+ metadata:
+ labels:
+ release: "{{ .Release.Name }}"
+ app: {{ include "common.name" . }}
+ spec:
+{{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity | indent 8 }}
+{{- end }}
+{{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector | indent 8 }}
+{{- end }}
+{{- if .Values.tolerations }}
+ tolerations:
+{{ toYaml .Values.tolerations | indent 8 }}
+{{- end }}
+ containers:
+ - name: {{ include "common.fullname" . }}
+ image: "{{ .Values.repository }}/{{ .Values.image }}"
+ imagePullPolicy: "{{ .Values.pullPolicy }}"
+ ports:
+ - containerPort: {{ .Values.service.peerInternalPort }}
+ name: {{ .Values.service.peerPortName }}
+ - containerPort: {{ .Values.service.clientInternalPort }}
+ name: {{ .Values.service.clientPortName }}
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.service.clientInternalPort }}
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ timeoutSeconds: {{ .Values.liveness.timeoutSeconds }}
+ {{ end }}
+ resources:
+{{ include "common.resources" . | indent 10 }}
+ env:
+ - name: INITIAL_CLUSTER_SIZE
+ value: {{ .Values.replicaCount | quote }}
+ - name: SET_NAME
+ value: {{ include "common.fullname" . }}
+ - name: SERVICE_NAME
+ value: {{ include "common.servicename" . }}
+{{- if .Values.extraEnv }}
+{{ toYaml .Values.extraEnv | indent 8 }}
+{{- end }}
+ lifecycle:
+ preStop:
+ exec:
+ command:
+ - "/bin/sh"
+ - "-ec"
+ - |
+ EPS=""
+ for i in $(seq 0 $((${INITIAL_CLUSTER_SIZE} - 1))); do
+ EPS="${EPS}${EPS:+,}http://${SET_NAME}-${i}.${SERVICE_NAME}:2379"
+ done
+
+ HOSTNAME=$(hostname)
+
+ member_hash() {
+ etcdctl member list | grep http://${HOSTNAME}.${SERVICE_NAME}:2380 | cut -d':' -f1 | cut -d'[' -f1
+ }
+
+ SET_ID=${HOSTNAME##*[^0-9]}
+
+ if [ "${SET_ID}" -ge ${INITIAL_CLUSTER_SIZE} ]; then
+ echo "Removing ${HOSTNAME} from etcd cluster"
+ ETCDCTL_ENDPOINT=${EPS} etcdctl member remove $(member_hash)
+ if [ $? -eq 0 ]; then
+ # Remove everything otherwise the cluster will no longer scale-up
+ rm -rf /var/run/etcd/*
+ fi
+ fi
+ command:
+ - "/bin/sh"
+ - "-ec"
+ - |
+ HOSTNAME=$(hostname)
+
+ # store member id into PVC for later member replacement
+ collect_member() {
+ while ! etcdctl member list &>/dev/null; do sleep 1; done
+ etcdctl member list | grep http://${HOSTNAME}.${SERVICE_NAME}:2380 | cut -d':' -f1 | cut -d'[' -f1 > /var/run/etcd/member_id
+ exit 0
+ }
+
+ eps() {
+ EPS=""
+ for i in $(seq 0 $((${INITIAL_CLUSTER_SIZE} - 1))); do
+ EPS="${EPS}${EPS:+,}http://${SET_NAME}-${i}.${SERVICE_NAME}:2379"
+ done
+ echo ${EPS}
+ }
+
+ member_hash() {
+ etcdctl member list | grep http://${HOSTNAME}.${SERVICE_NAME}:2380 | cut -d':' -f1 | cut -d'[' -f1
+ }
+
+ # we should wait for other pods to be up before trying to join
+ # otherwise we got "no such host" errors when trying to resolve other members
+ for i in $(seq 0 $((${INITIAL_CLUSTER_SIZE} - 1))); do
+ while true; do
+ echo "Waiting for ${SET_NAME}-${i}.${SERVICE_NAME} to come up"
+ ping -W 1 -c 1 ${SET_NAME}-${i}.${SERVICE_NAME} > /dev/null && break
+ sleep 1s
+ done
+ done
+
+ # re-joining after failure?
+ if [[ -e /var/run/etcd/default.etcd && -f /var/run/etcd/member_id ]]; then
+ echo "Re-joining etcd member"
+ member_id=$(cat /var/run/etcd/member_id)
+
+ # re-join member
+ ETCDCTL_ENDPOINT=$(eps) etcdctl member update ${member_id} http://${HOSTNAME}.${SERVICE_NAME}:2380 | true
+ exec etcd --name ${HOSTNAME} \
+ --listen-peer-urls http://0.0.0.0:2380 \
+ --listen-client-urls http://0.0.0.0:2379\
+ --advertise-client-urls http://${HOSTNAME}.${SERVICE_NAME}:2379 \
+ --data-dir /var/run/etcd/default.etcd
+ fi
+
+ # etcd-SET_ID
+ SET_ID=${HOSTNAME##*[^0-9]}
+
+ # adding a new member to existing cluster (assuming all initial pods are available)
+ if [ "${SET_ID}" -ge ${INITIAL_CLUSTER_SIZE} ]; then
+ export ETCDCTL_ENDPOINT=$(eps)
+
+ # member already added?
+ MEMBER_HASH=$(member_hash)
+ if [ -n "${MEMBER_HASH}" ]; then
+ # the member hash exists but for some reason etcd failed
+ # as the datadir has not be created, we can remove the member
+ # and retrieve new hash
+ etcdctl member remove ${MEMBER_HASH}
+ fi
+
+ echo "Adding new member"
+ etcdctl member add ${HOSTNAME} http://${HOSTNAME}.${SERVICE_NAME}:2380 | grep "^ETCD_" > /var/run/etcd/new_member_envs
+
+ if [ $? -ne 0 ]; then
+ echo "Exiting"
+ rm -f /var/run/etcd/new_member_envs
+ exit 1
+ fi
+
+ cat /var/run/etcd/new_member_envs
+ source /var/run/etcd/new_member_envs
+
+ collect_member &
+
+ exec etcd --name ${HOSTNAME} \
+ --listen-peer-urls http://0.0.0.0:2380 \
+ --listen-client-urls http://0.0.0.0:2379 \
+ --advertise-client-urls http://${HOSTNAME}.${SERVICE_NAME}:2379 \
+ --data-dir /var/run/etcd/default.etcd \
+ --initial-advertise-peer-urls http://${HOSTNAME}.${SERVICE_NAME}:2380 \
+ --initial-cluster ${ETCD_INITIAL_CLUSTER} \
+ --initial-cluster-state ${ETCD_INITIAL_CLUSTER_STATE}
+ fi
+
+ PEERS=""
+ for i in $(seq 0 $((${INITIAL_CLUSTER_SIZE} - 1))); do
+ PEERS="${PEERS}${PEERS:+,}${SET_NAME}-${i}=http://${SET_NAME}-${i}.${SERVICE_NAME}:2380"
+ done
+
+ collect_member &
+
+ # join member
+ exec etcd --name ${HOSTNAME} \
+ --initial-advertise-peer-urls http://${HOSTNAME}.${SERVICE_NAME}:2380 \
+ --listen-peer-urls http://0.0.0.0:2380 \
+ --listen-client-urls http://0.0.0.0:2379 \
+ --advertise-client-urls http://${HOSTNAME}.${SERVICE_NAME}:2379 \
+ --initial-cluster-token etcd-cluster-1 \
+ --initial-cluster ${PEERS} \
+ --initial-cluster-state new \
+ --data-dir /var/run/etcd/default.etcd
+ volumeMounts:
+ - name: {{ include "common.fullname" . }}-data
+ mountPath: /var/run/etcd
+ {{- if .Values.persistence.enabled }}
+ volumeClaimTemplates:
+ - metadata:
+ name: {{ include "common.fullname" . }}-data
+ spec:
+ accessModes:
+ - "{{ .Values.persistence.accessMode }}"
+ resources:
+ requests:
+ # upstream recommended max is 700M
+ storage: "{{ .Values.persistence.storage }}"
+ storageClassName: {{ include "common.fullname" . }}-data
+ {{- else }}
+ volumes:
+ - name: {{ include "common.fullname" . }}-data
+ {{- if .Values.memoryMode }}
+ emptyDir:
+ medium: Memory
+ {{- else }}
+ emptyDir: {}
+ {{- end }}
+ {{- end }}
+
diff --git a/deployments/helm/emcoOpenNESS/etcd/values.yaml b/deployments/helm/emcoOpenNESS/etcd/values.yaml
new file mode 100644
index 0000000..c23952f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/etcd/values.yaml
@@ -0,0 +1,65 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefix: 302
+ persistence: {}
+
+#################################################################
+# Application configuration defaults.
+#################################################################
+
+#repository: etcd
+repository: "k8s.gcr.io"
+image: "etcd-amd64:3.3.17"
+pullPolicy: Always
+
+# default number of instances in the StatefulSet
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 90
+ periodSeconds: 30
+ timeoutSeconds: 5
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+persistence:
+ enabled: false
+ volumeReclaimPolicy: Retain
+ accessMode: ReadWriteMany
+ storageType: hostPath
+ storage: 1Gi
+ mountPath: /dockerdata-nfs
+ mountSubPath: "etcd/data"
+
+## This is only available when persistentVolume is false:
+## If persistentVolume is not enabled, one can choose to use memory mode for ETCD by setting memoryMode to "true".
+## The system will create a volume with "medium: Memory"
+memoryMode: false
+
+service:
+ name: emco-etcd
+ peerInternalPort: 2380
+ peerPortName: etcd-server
+ clientInternalPort : 2379
+ clientPortName: etcd-client
+
+## Node labels and tolerations for pod assignment
+## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
+## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature
+nodeSelector: {}
+tolerations: []
+affinity: {}
+extraEnv: []
+resources: {}
+
diff --git a/deployments/helm/emcoOpenNESS/fluentd/Chart.yaml b/deployments/helm/emcoOpenNESS/fluentd/Chart.yaml
new file mode 100644
index 0000000..9885c28
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/Chart.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+appVersion: 1.10.2
+description: Fluentd is an open source data collector for unified logging layer
+engine: gotpl
+home: https://www.fluentd.org/
+icon: https://bitnami.com/assets/stacks/fluentd/img/fluentd-stack-110x117.png
+keywords:
+- fluentd
+- logging
+- logs
+- data
+- collector
+maintainers:
+- email: containers@bitnami.com
+ name: Bitnami
+name: fluentd
+sources:
+- https://github.com/bitnami/bitnami-docker-fluentd
+version: 1.0.3
diff --git a/deployments/helm/emcoOpenNESS/fluentd/README.md b/deployments/helm/emcoOpenNESS/fluentd/README.md
new file mode 100644
index 0000000..ac07a7f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/README.md
@@ -0,0 +1,294 @@
+# Fluentd
+
+[Fluentd](https://www.fluentd.org/) is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data.
+
+## TL;DR;
+
+```console
+$ helm repo add bitnami https://charts.bitnami.com/bitnami
+$ helm install my-release bitnami/fluentd
+```
+
+## Introduction
+
+This chart bootstraps a [Fluentd](https://github.com/bitnami/bitnami-docker-fluentd) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
+
+Bitnami charts can be used with [Kubeapps](https://kubeapps.com/) for deployment and management of Helm Charts in clusters.
+
+## Prerequisites
+
+- Kubernetes 1.12+
+- Helm 2.11+ or Helm 3.0-beta3+
+- PV provisioner support in the underlying infrastructure
+
+> Note: Please, note that the forwarder runs the container as root by default setting the `forwarder.securityContext.runAsUser` to `0` (_root_ user)
+
+## Installing the Chart
+
+To install the chart with the release name `my-release`:
+
+```console
+$ helm repo add bitnami https://charts.bitnami.com/bitnami
+$ helm install my-release bitnami/fluentd
+```
+
+These commands deploy Fluentd on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation.
+
+> **Tip**: List all releases using `helm list`
+
+## Uninstalling the Chart
+
+To uninstall/delete the `my-release` resources:
+
+```console
+$ helm delete my-release
+```
+
+The command removes all the Kubernetes components associated with the chart and deletes the release. Use the option `--purge` to delete all history too.
+
+## Parameters
+
+The following tables lists the configurable parameters of the kibana chart and their default values.
+
+| Parameter | Description | Default |
+|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| `global.imageRegistry` | Global Docker image registry | `nil` |
+| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) |
+| `image.registry` | Fluentd image registry | `docker.io` |
+| `image.repository` | Fluentd image name | `bitnami/fluentd` |
+| `image.tag` | Fluentd image tag | `{TAG_NAME}` |
+| `image.pullPolicy` | Fluentd image pull policy | `IfNotPresent` |
+| `image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) |
+| `nameOverride` | String to partially override fluentd.fullname template with a string (will prepend the release name) | `nil` |
+| `fullnameOverride` | String to fully override fluentd.fullname template with a string | `nil` |
+| `clusterDomain` | Kubernetes DNS domain name to use | `cluster.local` |
+| `forwarder.enabled` | Enable Fluentd forwarder | `true` |
+| `forwarder.daemonUser` | Fluentd forwarder daemon system user | `root` |
+| `forwarder.daemonGroup` | Fluentd forwarder daemon system group | `root` |
+| `forwarder.securityContext.enabled` | Enable security context for forwarder pods | `true` |
+| `forwarder.securityContext.fsGroup` | Group ID for forwarder's containers filesystem | `0` |
+| `forwarder.securityContext.runAsUser` | User ID for forwarder's containers | `0` |
+| `forwarder.configFile` | Name of the config file that will be used by Fluentd at launch under the `/opt/bitnami/fluentd/conf` directory | `fluentd.conf` |
+| `forwarder.configMap` | Name of the config map that contains the Fluentd configuration files | `nil` |
+| `forwarder.extraArgs` | Extra arguments for the Fluentd command line | `nil` |
+| `forwarder.extraEnv` | Extra environment variables to pass to the container | `[]` |
+| `forwarder.containerPorts` | Ports the forwarder containers will listen on | `Check values.yaml` |
+| `forwarder.service.type` | Kubernetes service type (`ClusterIP`, `NodePort`, or `LoadBalancer`) for the forwarders | `ClusterIP` |
+| `forwarder.service.ports` | Array containing the forwarder service ports | `Check values.yaml file` |
+| `forwarder.service.loadBalancerIP` | loadBalancerIP if service type is `LoadBalancer` | `nil` |
+| `forwarder.service.loadBalancerSourceRanges` | Addresses that are allowed when service is LoadBalancer | `[]` |
+| `forwarder.service.clusterIP` | Static clusterIP or None for headless services | `nil` |
+| `forwarder.service.annotations` | Annotations for the forwarder service | `{}` |
+| `forwarder.livenessProbe.enabled` | Enable liveness probes for the forwarder | `true` |
+| `forwarder.livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | `60` |
+| `forwarder.livenessProbe.periodSeconds` | How often to perform the probe | `10` |
+| `forwarder.livenessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `forwarder.livenessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `6` |
+| `forwarder.livenessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `forwarder.readinessProbe.enabled` | Enable readiness probes for the forwarder | `true` |
+| `forwarder.readinessProbe.initialDelaySeconds` | Delay before readiness probe is initiated | `5` |
+| `forwarder.readinessProbe.periodSeconds` | How often to perform the probe | `10` |
+| `forwarder.readinessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `forwarder.readinessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `6` |
+| `forwarder.readinessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `forwarder.updateStrategy` | Update strategy for the forwarder DaemonSet | `RollingUpdate` |
+| `forwarder.resources` | Configure resource requests and limits | `nil` |
+| `forwarder.nodeSelector` | Node labels for pod assignment | `{}` |
+| `forwarder.tolerations` | Tolerations for pod assignment | `[]` |
+| `forwarder.affinity` | Affinity for pod assignment | `{}` |
+| `forwarder.podAnnotations` | Pod annotations | `{}` |
+| `aggregator.enabled` | Enable Fluentd aggregator | `true` |
+| `aggregator.replicaCount` | Number of aggregator pods to deploy in the Stateful Set | `2` |
+| `aggregator.securityContext.enabled` | Enable security context for aggregator pods | `true` |
+| `aggregator.securityContext.fsGroup` | Group ID for aggregator's containers filesystem | `1001` |
+| `aggregator.securityContext.runAsUser` | User ID for aggregator's containers | `1001` |
+| `aggregator.configFile` | Name of the config file that will be used by Fluentd at launch under the `/opt/bitnami/fluentd/conf` directory | `fluentd.conf` |
+| `aggregator.configMap` | Name of the config map that contains the Fluentd configuration files | `nil` |
+| `aggregator.port` | Kubernetes Service port - Fluentd transport port for the aggregators | `24224` |
+| `aggregator.extraArgs` | Extra arguments for the Fluentd command line | `nil` |
+| `aggregator.extraEnv` | Extra environment variables to pass to the container | `[]` |
+| `aggregator.containerPorts` | Ports the aggregator containers will listen on | `Check values.yaml` |
+| `aggregator.service.type` | Kubernetes service type (`ClusterIP`, `NodePort`, or `LoadBalancer`) for the aggregators | `ClusterIP` |
+| `aggregator.service.ports` | Array containing the aggregator service ports | `Check values.yaml file` |
+| `aggregator.service.loadBalancerIP` | loadBalancerIP if service type is `LoadBalancer` | `nil` |
+| `aggregator.service.loadBalancerSourceRanges` | Addresses that are allowed when service is LoadBalancer | `[]` |
+| `aggregator.service.clusterIP` | Static clusterIP or None for headless services | `nil` |
+| `aggregator.service.annotations` | Annotations for the aggregator service | `{}` |
+| `aggregator.persistence.enabled` | Enable persistence volume for the aggregator | `false` |
+| `aggregator.persistence.storageClass` | Persistent Volume storage class | `nil` |
+| `aggregator.persistence.accessMode` | Persistent Volume access mode | `ReadWriteOnce` |
+| `aggregator.persistence.size` | Persistent Volume size | `10Gi` |
+| `aggregator.livenessProbe.enabled` | Enable liveness probes for the aggregator | `true` |
+| `aggregator.livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | `60` |
+| `aggregator.livenessProbe.periodSeconds` | How often to perform the probe | `10` |
+| `aggregator.livenessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `aggregator.livenessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `6` |
+| `aggregator.livenessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `aggregator.readinessProbe.enabled` | Enable readiness probes for the aggregator | `true` |
+| `aggregator.readinessProbe.initialDelaySeconds` | Delay before readiness probe is initiated | `5` |
+| `aggregator.readinessProbe.periodSeconds` | How often to perform the probe | `10` |
+| `aggregator.readinessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `aggregator.readinessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `6` |
+| `aggregator.readinessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `aggregator.updateStrategy` | Update strategy for the aggregator DaemonSet | `RollingUpdate` |
+| `aggregator.resources` | Configure resource requests and limits | `nil` |
+| `aggregator.nodeSelector` | Node labels for pod assignment | `{}` |
+| `aggregator.tolerations` | Tolerations for pod assignment | `[]` |
+| `aggregator.affinity` | Affinity for pod assignment | `{}` |
+| `aggregator.podAnnotations` | Pod annotations | `{}` |
+| `serviceAccount.create` | Specify whether a ServiceAccount should be created | `true` |
+| `serviceAccount.name` | The name of the ServiceAccount to create | Generated using the `fluentd.fullname` template |
+| `rbac.create` | Specify whether RBAC resources should be created and used | `true` |
+| `metrics.enabled` | Enable the export of Prometheus metrics | `nil` |
+| `metrics.service.type` | Prometheus metrics service type | `ClusterIP` |
+| `metrics.service.loadBalancerIP` | Load Balancer IP if the Prometheus metrics server type is `LoadBalancer` | `nil` |
+| `metrics.service.port` | Prometheus metrics service port | `24231` |
+| `metrics.service.annotations` | Annotations for Prometheus metrics service | `{ prometheus.io/scrape: "true", prometheus.io/port: "80", prometheus.io/path: "_prometheus/metrics" }` |
+| `metrics.serviceMonitor.enabled` | if `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`) | `false` |
+| `metrics.serviceMonitor.namespace` | Namespace in which Prometheus is running | `nil` |
+| `metrics.serviceMonitor.interval` | Interval at which metrics should be scraped. | `nil` (Prometheus Operator default value) |
+| `metrics.serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `nil` (Prometheus Operator default value) |
+| `metrics.serviceMonitor.selector` | Prometheus instance selector labels | `nil` |
+| `tls.enabled` | Enable the addition of TLS certificates | `false` |
+| `tls.caCertificate` | Ca certificate | Certificate Authority (CA) bundle content |
+| `tls.serverCertificate` | Server certificate | Server certificate content |
+| `tls.serverKey` | Server Key | Server private key content |
+| `tls.existingSecret` | Existing secret with certificate content | `nil` |
+Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
+
+```console
+$ helm install my-release \
+ --set aggregator.port=24444 bitnami/fluentd
+```
+
+The above command sets the aggregators to listen on port 24444.
+
+Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
+
+```console
+$ helm install my-release -f values.yaml bitnami/fluentd
+```
+
+> **Tip**: You can use the default [values.yaml](values.yaml)
+
+## Configuration and installation details
+
+### [Rolling VS Immutable tags](https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/)
+
+It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image.
+
+Bitnami will release a new chart updating its containers if a new version of the main container, significant changes, or critical vulnerabilities exist.
+
+### Production configuration and horizontal scaling
+
+This chart includes a `values-production.yaml` file where you can find some parameters oriented to production configuration in comparison to the regular `values.yaml`. You can use this file instead of the default one.
+
+- Number of aggregator nodes:
+```diff
+- aggregator.replicaCount: 1
++ aggregator.replicaCount: 2
+```
+
+- Enable prometheus to access fluentd metrics endpoint:
+```diff
+- metrics.enabled: false
++ metrics.enabled: true
+```
+
+To horizontally scale this chart once it has been deployed, you can upgrade the deployment using a new value for the `aggregator.replicaCount` parameter.
+
+### Forwarding the logs to another service
+
+By default, the aggregators in this chart will send the processed logs to the standard output. However, a common practice is to send them to another service, like Elasticsearch, instead. This can be achieved with this Helm Chart by mounting your own configuration files. For example:
+
+**configmap.yaml**
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: elasticsearch-output
+data:
+ fluentd.conf: |
+ # Prometheus Exporter Plugin
+ # input plugin that exports metrics
+
+
+ # input plugin that collects metrics from MonitorAgent
+
+
+ # input plugin that collects metrics for output plugin
+
+ {{- end }}
+
+ # Ignore fluentd own events
+
+ @type null
+
+
+ # TCP input to receive logs from the forwarders
+
+
+ # HTTP input for the liveness and readiness probes
+
+
+ # Throw the healthcheck to the standard output instead of forwarding it
+
+ @type stdout
+
+
+ # Send the logs to the standard output
+
+ @type elasticsearch
+ include_tag_key true
+ host "#{ENV['ELASTICSEARCH_HOST']}"
+ port "#{ENV['ELASTICSEARCH_PORT']}"
+ logstash_format true
+
+
+ @type file
+ path /opt/bitnami/fluentd/logs/buffers/logs.buffer
+ flush_thread_count 2
+ flush_interval 5s
+
+
+```
+
+As an example, using the above configmap, you should specify the required parameters when upgrading or installing the chart:
+
+```console
+aggregator.configMap=elasticsearch-output
+aggregator.extraEnv[0].name=ELASTICSEARCH_HOST
+aggregator.extraEnv[0].value=your-ip-here
+aggregator.extraEnv[1].name=ELASTICSEARCH_PORT
+aggregator.extraEnv[1].value=your-port-here
+```
+
+### Notable changes
+
+## 1.0.0
+
+In this version of the chart the Fluentd forwarder daemon system user will be root by default. This is done to ensure that mounted host paths are readable by the forwarder. For more context, check this [support case](https://github.com/bitnami/charts/issues/1905).
+
+No issues are expected in the upgrade process. However, please ensure that you add extra security measures in your cluster as you will be running root containers. If you want the daemon to be run as a user different from root, you can change the `forwarder.daemonUser` and `forwarder.daemonGroup` values. In this case make sure that the user you choose has sufficient permissions to read log files under `/var/lib/docker/containers` directory.
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/NOTES.txt b/deployments/helm/emcoOpenNESS/fluentd/templates/NOTES.txt
new file mode 100644
index 0000000..eea7a2a
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/NOTES.txt
@@ -0,0 +1,30 @@
+** Please be patient while the chart is being deployed **
+
+ To verify that Fluentd has started, run:
+
+ kubectl get all -l "app.kubernetes.io/name={{ include "fluentd.name" . }},app.kubernetes.io/instance={{ .Release.Name }}"
+{{ if and .Values.aggregator.enabled .Values.forwarder.enabled (not .Values.aggregator.configMap) }}
+ Logs are captured on each node by the forwarder pods and then sent to the aggregator pods. By default, the aggregator pods send the logs to the standard output.
+ You can see all the logs by running this command:
+
+ kubectl logs -l "app.kubernetes.io/component=aggregator"
+
+ You can mount your own configuration files to the aggregators and the forwarders. For example, this is useful if you want to forward the aggregated logs to Elasticsearch or another service.
+{{- else if and .Values.aggregator.enabled (not .Values.forwarder.enabled) }}
+ You have deployed Fluentd in aggregator-only mode. Logs received by the aggregator will be thrown to the standard output by default.
+ You can see all the logs by running this command:
+
+ kubectl logs -l "app.kubernetes.io/component=aggregator"
+
+ You can mount your own configuration files to the aggregators. For example, this is useful if you want to forward the logs to Elasticsearch or another service.
+{{- else if and (not .Values.aggregator.enabled) (not .Values.forwarder.configMap) }}
+ Logs are captured on each node by the forwarder pods and sent to the standard output by default.
+ You can see all the logs by running this command:
+
+ kubectl logs -l "app.kubernetes.io/component=forwarder"
+
+ You can mount your own configuration files to the forwarders. For example, this is useful if you want to forward the logs to Elasticsearch or another service.
+{{- end }}
+
+{{- include "fluentd.validateValues" . }}
+{{- include "fluentd.checkRollingTags" . -}}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/_helpers.tpl b/deployments/helm/emcoOpenNESS/fluentd/templates/_helpers.tpl
new file mode 100644
index 0000000..f72f6e3
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/_helpers.tpl
@@ -0,0 +1,188 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "fluentd.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "fluentd.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "fluentd.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Common labels
+*/}}
+{{- define "fluentd.labels" -}}
+app.kubernetes.io/name: {{ include "fluentd.name" . }}
+helm.sh/chart: {{ include "fluentd.chart" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end -}}
+
+{{/*
+Labels to use on daemonset.spec.selector.matchLabels, statefulset.spec.selector.matchLabels and svc.spec.selector
+*/}}
+{{- define "fluentd.matchLabels" -}}
+app.kubernetes.io/name: {{ include "fluentd.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end -}}
+
+{{/*
+Return the proper Fluentd image name
+*/}}
+{{- define "fluentd.image" -}}
+{{- $registryName := .Values.image.registry -}}
+{{- $repositoryName := .Values.image.repository -}}
+{{- $tag := .Values.image.tag | toString -}}
+{{/*
+Helm 2.11 supports the assignment of a value to a variable defined in a different scope,
+but Helm 2.9 and 2.10 doesn't support it, so we need to implement this if-else logic.
+Also, we can't use a single if because lazy evaluation is not an option
+*/}}
+{{- if .Values.global.imageRegistry }}
+ {{- printf "%s/%s:%s" .Values.global.imageRegistry $repositoryName $tag -}}
+{{- else -}}
+ {{- printf "%s/%s:%s" $registryName $repositoryName $tag -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return the proper Docker Image Registry Secret Names
+*/}}
+{{- define "fluentd.imagePullSecrets" -}}
+{{/*
+Helm 2.11 supports the assignment of a value to a variable defined in a different scope,
+but Helm 2.9 and 2.10 does not support it, so we need to implement this if-else logic.
+Also, we can not use a single if because lazy evaluation is not an option
+*/}}
+{{- if .Values.global.imagePullSecrets }}
+imagePullSecrets:
+{{- range .Values.global.imagePullSecrets }}
+ - name: {{ . }}
+{{- end }}
+{{- else if .Values.image.pullSecrets }}
+imagePullSecrets:
+{{- range .Values.image.pullSecrets }}
+ - name: {{ . }}
+{{- end }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "fluentd.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+ {{ default (include "fluentd.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+ {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
+
+{{/* Check if there are rolling tags in the images */}}
+{{- define "fluentd.checkRollingTags" -}}
+{{- if and (contains "bitnami/" .Values.image.repository) (not (.Values.image.tag | toString | regexFind "-r\\d+$|sha256:")) }}
+WARNING: Rolling tag detected ({{ .Values.image.repository }}:{{ .Values.image.tag }}), please note that it is strongly recommended to avoid using rolling tags in a production environment.
++info https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/
+{{- end }}
+{{- end -}}
+
+{{/*
+Validate data
+*/}}
+{{- define "fluentd.validateValues" -}}
+{{- $messages := list -}}
+{{- $messages := append $messages (include "fluentd.validateValues.deployment" .) -}}
+{{- $messages := append $messages (include "fluentd.validateValues.rbac" .) -}}
+{{- $messages := without $messages "" -}}
+{{- $message := join "\n" $messages -}}
+ {{- if $message -}}
+{{- printf "\nVALUES VALIDATION:\n%s" $message | fail -}}
+{{- end -}}
+{{- end -}}
+
+{{/* Validate values of Fluentd - forwarders and aggregators can't be disabled at the same time */}}
+{{- define "fluentd.validateValues.deployment" -}}
+{{- if and (not .Values.forwarder.enabled) (not .Values.aggregator.enabled) -}}
+fluentd:
+ You have disabled both the forwarders and the aggregators.
+ Please enable at least one of them (--set forwarder.enabled=true) (--set aggregator.enabled=true)
+{{- end -}}
+{{- end -}}
+
+{{/* Validate values of Fluentd - must create serviceAccount to create enable RBAC */}}
+{{- define "fluentd.validateValues.rbac" -}}
+{{- if and .Values.rbac.create (not .Values.serviceAccount.create) -}}
+fluentd: rbac.create
+ A ServiceAccount is required ("rbac.create=true" is set)
+ Please create a ServiceAccount (--set serviceAccount.create=true)
+{{- end -}}
+{{- end -}}
+
+{{/*
+Get the forwarder configmap name.
+*/}}
+{{- define "fluentd.forwarder.configMap" -}}
+{{- if .Values.forwarder.configMap -}}
+ {{- printf "%s" (tpl .Values.forwarder.configMap $) -}}
+{{- else -}}
+ {{- printf "%s-forwarder-cm" (include "fluentd.fullname" . ) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Get the aggregator configmap name.
+*/}}
+{{- define "fluentd.aggregator.configMap" -}}
+{{- if .Values.aggregator.configMap -}}
+ {{- printf "%s" (tpl .Values.aggregator.configMap $) -}}
+{{- else -}}
+ {{- printf "%s-aggregator-cm" (include "fluentd.fullname" . ) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Get the certificates secret name.
+*/}}
+{{- define "fluentd.tls.secretName" -}}
+{{- if .Values.tls.existingSecret -}}
+ {{- printf "%s" (tpl .Values.tls.existingSecret $) -}}
+{{- else -}}
+ {{- printf "%s-tls" (include "fluentd.fullname" . ) -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Renders a value that contains template.
+Usage:
+{{ include "fluentd.tplValue" (dict "value" .Values.path.to.the.Value "context" $) }}
+*/}}
+{{- define "fluentd.tplValue" -}}
+ {{- if typeIs "string" .value }}
+ {{- tpl .value .context }}
+ {{- else }}
+ {{- tpl (.value | toYaml) .context }}
+ {{- end }}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-configmap.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-configmap.yaml
new file mode 100644
index 0000000..885e3b9
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-configmap.yaml
@@ -0,0 +1,65 @@
+{{- if and .Values.aggregator.enabled (not .Values.aggregator.configMap) -}}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "fluentd.fullname" . }}-aggregator-cm
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: aggregator
+data:
+ fluentd.conf: |
+ {{- if .Values.metrics.enabled -}}
+ # Prometheus Exporter Plugin
+ # input plugin that exports metrics
+
+
+ # input plugin that collects metrics from MonitorAgent
+
+
+ # input plugin that collects metrics for output plugin
+
+ {{- end }}
+
+ # Ignore fluentd own events
+
+ @type null
+
+
+ # TCP input to receive logs from
+ {{- if and .Values.aggregator.port }}
+
+ {{- end }}
+
+ # HTTP input for the liveness and readiness probes
+
+
+ # Throw the healthcheck to the standard output instead of forwarding it
+
+ @type stdout
+
+
+ # Send the logs to the standard output
+
+ @type stdout
+
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-statefulset.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-statefulset.yaml
new file mode 100644
index 0000000..40957cf
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-statefulset.yaml
@@ -0,0 +1,135 @@
+{{- if .Values.aggregator.enabled -}}
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: {{ include "fluentd.fullname" . }}
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: aggregator
+spec:
+ selector:
+ matchLabels: {{- include "fluentd.matchLabels" . | nindent 6 }}
+ app.kubernetes.io/component: aggregator
+ serviceName: {{ include "fluentd.fullname" . }}-headless
+ replicas: {{ .Values.aggregator.replicaCount }}
+ updateStrategy: {{- toYaml .Values.aggregator.updateStrategy | nindent 4 }}
+ template:
+ metadata:
+ labels: {{- include "fluentd.labels" . | nindent 8 }}
+ app.kubernetes.io/component: aggregator
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/aggregator-configmap.yaml") . | sha256sum }}
+ {{- if .Values.aggregator.podAnnotations }}
+ {{- include "fluentd.tplValue" (dict "value" .Values.aggregator.podAnnotations "context" $) | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- include "fluentd.imagePullSecrets" . | nindent 6 }}
+ {{- if .Values.aggregator.securityContext.enabled }}
+ securityContext:
+ runAsUser: {{ .Values.aggregator.securityContext.runAsUser }}
+ fsGroup: {{ .Values.aggregator.securityContext.fsGroup }}
+ {{- end }}
+ {{- if .Values.aggregator.affinity }}
+ affinity: {{- include "fluentd.tplValue" (dict "value" .Values.aggregator.affinity "context" $) | nindent 8 }}
+ {{- end }}
+ {{- if .Values.aggregator.nodeSelector }}
+ nodeSelector: {{- include "fluentd.tplValue" (dict "value" .Values.aggregator.nodeSelector "context" $) | nindent 8 }}
+ {{- end }}
+ {{- if .Values.aggregator.tolerations }}
+ tolerations: {{- include "fluentd.tplValue" (dict "value" .Values.aggregator.tolerations "context" $) | nindent 8 }}
+ {{- end }}
+ containers:
+ - name: fluentd
+ image: {{ include "fluentd.image" . }}
+ imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
+ env:
+ - name: FLUENTD_CONF
+ value: {{ .Values.aggregator.configFile }}
+ - name: FLUENTD_OPT
+ value: {{ .Values.aggregator.extraArgs | quote }}
+ {{- if .Values.aggregator.extraEnv }}
+ {{- toYaml .Values.aggregator.extraEnv | nindent 12 }}
+ {{- end }}
+ ports:
+ {{- if .Values.aggregator.port }}
+ - name: tcp
+ containerPort: {{ .Values.aggregator.port }}
+ protocol: TCP
+ {{- end }}
+ {{- if .Values.aggregator.containerPorts }}
+ {{- toYaml .Values.aggregator.containerPorts | nindent 12 }}
+ {{- end }}
+ {{- if .Values.metrics.enabled }}
+ - name: metrics
+ containerPort: {{ .Values.metrics.service.port }}
+ protocol: TCP
+ {{- end }}
+ {{- if .Values.aggregator.livenessProbe.enabled }}
+ livenessProbe:
+ httpGet:
+ path: /fluentd.healthcheck?json=%7B%22ping%22%3A+%22pong%22%7D
+ port: http
+ initialDelaySeconds: {{ .Values.aggregator.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.aggregator.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.aggregator.livenessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.aggregator.livenessProbe.successThreshold }}
+ failureThreshold: {{ .Values.aggregator.livenessProbe.failureThreshold }}
+ {{- end }}
+ {{- if .Values.aggregator.readinessProbe.enabled }}
+ readinessProbe:
+ httpGet:
+ path: /fluentd.healthcheck?json=%7B%22ping%22%3A+%22pong%22%7D
+ port: http
+ initialDelaySeconds: {{ .Values.aggregator.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.aggregator.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.aggregator.readinessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.aggregator.readinessProbe.successThreshold }}
+ failureThreshold: {{ .Values.aggregator.readinessProbe.failureThreshold }}
+ {{- end }}
+ {{- if .Values.aggregator.resources }}
+ resources: {{- toYaml .Values.aggregator.resources | nindent 12 }}
+ {{- end }}
+ volumeMounts:
+ - name: fluentd-config
+ mountPath: /opt/bitnami/fluentd/conf
+ {{- if .Values.aggregator.persistence.enabled }}
+ - name: {{ include "fluentd.fullname" . }}-buffer
+ mountPath: /opt/bitnami/fluentd/logs/buffers
+ {{- else }}
+ - name: buffer
+ mountPath: /opt/bitnami/fluentd/logs/buffers
+ {{- end }}
+ {{- if .Values.tls.enabled }}
+ - name: certs
+ mountPath: /opt/bitnami/fluentd/certs
+ {{- end }}
+ volumes:
+ {{- if .Values.tls.enabled }}
+ - name: certs
+ secret:
+ secretName: {{ template "fluentd.tls.secretName" . }}
+ items:
+ - key: tls.crt
+ path: tls.crt
+ - key: tls.key
+ path: tls.key
+ {{- end }}
+ - name: fluentd-config
+ configMap:
+ name: {{ template "fluentd.aggregator.configMap" . }}
+ {{- if not .Values.aggregator.persistence.enabled }}
+ - name: buffer
+ emptyDir: {}
+ {{- end }}
+
+ {{- if .Values.aggregator.persistence.enabled }}
+ volumeClaimTemplates:
+ - metadata:
+ name: {{ include "fluentd.fullname" . }}-buffer
+ spec:
+ accessModes: [{{ .Values.aggregator.persistence.accessMode }}]
+ storageClassName: {{ .Values.aggregator.persistence.storageClass }}
+ resources:
+ requests:
+ storage: {{ .Values.aggregator.persistence.size }}
+ {{- end }}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-svc.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-svc.yaml
new file mode 100644
index 0000000..4ae4379
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/aggregator-svc.yaml
@@ -0,0 +1,32 @@
+{{- if and .Values.aggregator.enabled .Values.aggregator.service.ports }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "fluentd.fullname" . }}-aggregator
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: aggregator
+ {{- if .Values.aggregator.service.annotations }}
+ annotations: {{- include "fluentd.tplValue" (dict "value" .Values.aggregator.service.annotations "context" $) | nindent 4 }}
+ {{- end }}
+spec:
+ type: {{ .Values.aggregator.service.type }}
+ {{- if and .Values.aggregator.service.loadBalancerIP (eq .Values.aggregator.service.type "LoadBalancer") }}
+ loadBalancerIP: {{ .Values.aggregator.service.loadBalancerIP }}
+ {{- end }}
+ {{- if and .Values.aggregator.service.loadBalancerSourceRanges (eq .Values.aggregator.service.type "LoadBalancer") }}
+ loadBalancerSourceRanges:
+ {{- with .Values.aggregator.service.loadBalancerSourceRanges }}
+ {{ toYaml . | nindent 4 }}
+ {{- end }}
+ {{- end }}
+ {{- if and (eq .Values.aggregator.service.type "ClusterIP") .Values.aggregator.service.clusterIP }}
+ clusterIP: {{ .Values.aggregator.service.clusterIP }}
+ {{- end }}
+ ports:
+ {{- range $key, $value := .Values.aggregator.service.ports }}
+ - name: {{ $key }}
+ {{ toYaml $value | nindent 6 }}
+ {{- end }}
+ selector: {{ include "fluentd.matchLabels" . | nindent 4 }}
+ app.kubernetes.io/component: aggregator
+{{- end }}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/clusterrole.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/clusterrole.yaml
new file mode 100644
index 0000000..e4c9f50
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/clusterrole.yaml
@@ -0,0 +1,17 @@
+{{- if and .Values.serviceAccount.create .Values.rbac.create }}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "fluentd.fullname" . }}
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - "namespaces"
+ - "pods"
+ verbs:
+ - "get"
+ - "watch"
+ - "list"
+{{- end }}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/clusterrolebinding.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/clusterrolebinding.yaml
new file mode 100644
index 0000000..79c36e4
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/clusterrolebinding.yaml
@@ -0,0 +1,15 @@
+{{- if and .Values.serviceAccount.create .Values.rbac.create }}
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: {{ include "fluentd.fullname" . }}
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+roleRef:
+ kind: ClusterRole
+ apiGroup: rbac.authorization.k8s.io
+ name: {{ template "fluentd.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ template "fluentd.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end }}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-configmap.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-configmap.yaml
new file mode 100644
index 0000000..4fe7a76
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-configmap.yaml
@@ -0,0 +1,108 @@
+{{- if and .Values.forwarder.enabled (not .Values.forwarder.configMap) -}}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "fluentd.fullname" . }}-forwarder-cm
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: forwarder
+data:
+ fluentd.conf: |
+ {{- if .Values.metrics.enabled -}}
+ # Prometheus Exporter Plugin
+ # input plugin that exports metrics
+
+
+ # input plugin that collects metrics from MonitorAgent
+
+
+ # input plugin that collects metrics for output plugin
+
+
+ # input plugin that collects metrics for in_tail plugin
+
+ {{- end }}
+
+ # Ignore fluentd own events
+
+ @type null
+
+
+ # HTTP input for the liveness and readiness probes
+
+
+ # Throw the healthcheck to the standard output instead of forwarding it
+
+ @type stdout
+
+
+ # Get the logs from the containers running in the node
+
+
+ # enrich with kubernetes metadata
+
+ @type kubernetes_metadata
+
+ {{ if .Values.aggregator.enabled }}
+ # Forward all logs to the aggregators
+
+ @type forward
+ {{- $fullName := (include "fluentd.fullname" .) }}
+ {{- $global := . }}
+ {{- $domain := default "cluster.local" .Values.clusterDomain }}
+ {{- $port := .Values.aggregator.port | int }}
+ {{- range $i, $e := until (.Values.aggregator.replicaCount | int) }}
+
+ {{ printf "host %s-%d.%s-headless.%s.svc.%s" $fullName $i $fullName $global.Release.Namespace $domain }}
+ {{ printf "port %d" $port }}
+ {{- if ne $i 0 }}
+ standby
+ {{- end }}
+
+ {{- end}}
+
+
+ @type file
+ path /opt/bitnami/fluentd/logs/buffers/logs.buffer
+ flush_thread_count 2
+ flush_interval 5s
+
+
+ {{- else }}
+ # Send the logs to the standard output
+
+ @type stdout
+
+ {{- end -}}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-daemonset.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-daemonset.yaml
new file mode 100644
index 0000000..7c6e44d
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-daemonset.yaml
@@ -0,0 +1,125 @@
+{{- if .Values.forwarder.enabled }}
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "fluentd.fullname" . }}
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: forwarder
+spec:
+ selector:
+ matchLabels: {{- include "fluentd.matchLabels" . | nindent 6 }}
+ app.kubernetes.io/component: forwarder
+ updateStrategy: {{- toYaml .Values.forwarder.updateStrategy | nindent 4 }}
+ template:
+ metadata:
+ labels: {{- include "fluentd.labels" . | nindent 8 }}
+ app.kubernetes.io/component: forwarder
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/forwarder-configmap.yaml") . | sha256sum }}
+ {{- if .Values.forwarder.podAnnotations }}
+ {{- include "fluentd.tplValue" (dict "value" .Values.forwarder.podAnnotations "context" $) | nindent 8 }}
+ {{- end }}
+ spec:
+{{- include "fluentd.imagePullSecrets" . | nindent 6 }}
+ serviceAccountName: {{ template "fluentd.serviceAccountName" . }}
+ {{- if .Values.forwarder.affinity }}
+ affinity: {{- include "fluentd.tplValue" (dict "value" .Values.forwarder.affinity "context" $) | nindent 8 }}
+ {{- end }}
+ {{- if .Values.forwarder.nodeSelector }}
+ nodeSelector: {{- include "fluentd.tplValue" (dict "value" .Values.forwarder.nodeSelector "context" $) | nindent 8 }}
+ {{- end }}
+ {{- if .Values.forwarder.tolerations }}
+ tolerations: {{- include "fluentd.tplValue" (dict "value" .Values.forwarder.tolerations "context" $) | nindent 8 }}
+ {{- end }}
+ {{- if .Values.forwarder.securityContext.enabled }}
+ securityContext:
+ runAsUser: {{ .Values.forwarder.securityContext.runAsUser }}
+ fsGroup: {{ .Values.forwarder.securityContext.fsGroup }}
+ {{- end }}
+ containers:
+ - name: fluentd
+ image: {{ include "fluentd.image" . }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ env:
+ - name: FLUENTD_CONF
+ value: {{ .Values.forwarder.configFile }}
+ - name: FLUENTD_OPT
+ value: {{ .Values.forwarder.extraArgs | quote }}
+ - name: FLUENTD_DAEMON_USER
+ value: {{ .Values.forwarder.daemonUser | quote }}
+ - name: FLUEND_DAEMON_GROUP
+ value: {{ .Values.forwarder.daemonGroup | quote }}
+ {{- if .Values.forwarder.extraEnv }}
+ {{- toYaml .Values.forwarder.extraEnv | nindent 12 }}
+ {{- end }}
+ ports:
+ {{- if .Values.forwarder.containerPorts }}
+ {{- toYaml .Values.forwarder.containerPorts | nindent 12 }}
+ {{- end }}
+ {{- if .Values.metrics.enabled }}
+ - name: metrics
+ containerPort: {{ .Values.metrics.service.port }}
+ protocol: TCP
+ {{- end }}
+ {{- if .Values.forwarder.livenessProbe.enabled }}
+ livenessProbe:
+ httpGet:
+ path: /fluentd.healthcheck?json=%7B%22ping%22%3A+%22pong%22%7D
+ port: http
+ initialDelaySeconds: {{ .Values.forwarder.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.forwarder.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.forwarder.livenessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.forwarder.livenessProbe.successThreshold }}
+ failureThreshold: {{ .Values.forwarder.livenessProbe.failureThreshold }}
+ {{- end }}
+ {{- if .Values.forwarder.readinessProbe.enabled }}
+ readinessProbe:
+ httpGet:
+ path: /fluentd.healthcheck?json=%7B%22ping%22%3A+%22pong%22%7D
+ port: http
+ initialDelaySeconds: {{ .Values.forwarder.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.forwarder.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.forwarder.readinessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.forwarder.readinessProbe.successThreshold }}
+ failureThreshold: {{ .Values.forwarder.readinessProbe.failureThreshold }}
+ {{- end }}
+ {{- if .Values.forwarder.resources }}
+ resources: {{- toYaml .Values.forwarder.resources | nindent 12 }}
+ {{- end }}
+ volumeMounts:
+ - name: fluentd-config
+ mountPath: /opt/bitnami/fluentd/conf
+ - name: buffer
+ mountPath: /opt/bitnami/fluentd/logs/buffers
+ {{- if .Values.tls.enabled }}
+ - name: certs
+ mountPath: /opt/bitnami/fluentd/certs
+ {{- end }}
+ - name: varlog
+ mountPath: /var/log
+ - name: varlibdockercontainers
+ mountPath: /var/lib/docker/containers
+ readOnly: true
+ volumes:
+ {{- if .Values.tls.enabled }}
+ - name: certs
+ secret:
+ secretName: {{ template "fluentd.tls.secretName" . }}
+ items:
+ - key: tls.crt
+ path: tls.crt
+ - key: tls.key
+ path: tls.key
+ {{- end }}
+ - name: fluentd-config
+ configMap:
+ name: {{ template "fluentd.forwarder.configMap" . }}
+ - name: buffer
+ emptyDir: {}
+ - name: varlog
+ hostPath:
+ path: /var/log
+ - name: varlibdockercontainers
+ hostPath:
+ path: /var/lib/docker/containers
+{{- end }}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-svc.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-svc.yaml
new file mode 100644
index 0000000..a47d37b
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/forwarder-svc.yaml
@@ -0,0 +1,32 @@
+{{- if and .Values.forwarder.enabled .Values.forwarder.service.ports }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "fluentd.fullname" . }}-forwarder
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: forwarder
+ {{- if .Values.forwarder.service.annotations }}
+ annotations: {{- include "fluentd.tplValue" (dict "value" .Values.forwarder.service.annotations "context" $) | nindent 4 }}
+ {{- end }}
+spec:
+ type: {{ .Values.forwarder.service.type }}
+ {{- if and .Values.forwarder.service.loadBalancerIP (eq .Values.forwarder.service.type "LoadBalancer") }}
+ loadBalancerIP: {{ .Values.forwarder.service.loadBalancerIP }}
+ {{- end }}
+ {{- if and .Values.forwarder.service.loadBalancerSourceRanges (eq .Values.forwarder.service.type "LoadBalancer") }}
+ loadBalancerSourceRanges:
+ {{- with .Values.forwarder.service.loadBalancerSourceRanges }}
+ {{ toYaml . | nindent 4 }}
+ {{- end }}
+ {{- end }}
+ {{- if and (eq .Values.forwarder.service.type "ClusterIP") .Values.forwarder.service.clusterIP }}
+ clusterIP: {{ .Values.forwarder.service.clusterIP }}
+ {{- end }}
+ ports:
+ {{- range $key, $value := .Values.forwarder.service.ports }}
+ - name: {{ $key }}
+ {{ toYaml $value | nindent 6 }}
+ {{- end }}
+ selector: {{ include "fluentd.matchLabels" . | nindent 4 }}
+ app.kubernetes.io/component: forwarder
+{{- end }}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/metrics-svc.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/metrics-svc.yaml
new file mode 100644
index 0000000..2b0c92f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/metrics-svc.yaml
@@ -0,0 +1,18 @@
+{{- if .Values.metrics.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "fluentd.fullname" . }}-metrics
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ annotations: {{- include "fluentd.tplValue" (dict "value" .Values.metrics.service.annotations "context" $) | nindent 4 }}
+spec:
+ type: {{ .Values.metrics.service.type }}
+ {{- if and (eq .Values.metrics.service.type "LoadBalancer") .Values.metrics.service.loadBalancerIP }}
+ loadBalancerIP: {{ .Values.metrics.service.loadBalancerIP }}
+ {{- end }}
+ ports:
+ - name: metrics
+ port: {{ .Values.metrics.service.port }}
+ targetPort: metrics
+ selector: {{- include "fluentd.matchLabels" . | nindent 4 }}
+{{- end }}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/serviceaccount.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/serviceaccount.yaml
new file mode 100644
index 0000000..1e58475
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/serviceaccount.yaml
@@ -0,0 +1,7 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "fluentd.serviceAccountName" . }}
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+{{- end -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/servicemonitor.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/servicemonitor.yaml
new file mode 100644
index 0000000..e884ac5
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/servicemonitor.yaml
@@ -0,0 +1,28 @@
+{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+ name: {{ include "fluentd.fullname" . }}
+ {{- if .Values.metrics.serviceMonitor.namespace }}
+ namespace: {{ .Values.metrics.serviceMonitor.namespace }}
+ {{- end }}
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ {{- range $key, $value := .Values.metrics.serviceMonitor.selector }}
+ {{ $key }}: {{ $value | quote }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels: {{- include "fluentd.matchLabels" . | nindent 6 }}
+ endpoints:
+ - port: metrics
+ path: "/metrics"
+ {{- if .Values.metrics.serviceMonitor.interval }}
+ interval: {{ .Values.metrics.serviceMonitor.interval }}
+ {{- end }}
+ {{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
+ scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
+ {{- end }}
+ namespaceSelector:
+ matchNames:
+ - {{ .Release.Namespace }}
+{{- end }}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/svc-headless.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/svc-headless.yaml
new file mode 100644
index 0000000..a64899a
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/svc-headless.yaml
@@ -0,0 +1,18 @@
+{{- if and .Values.aggregator.enabled .Values.aggregator.service.ports -}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "fluentd.fullname" . }}-headless
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+ app.kubernetes.io/component: aggregator
+spec:
+ type: ClusterIP
+ clusterIP: None
+ ports:
+ {{- range $key, $value := .Values.aggregator.service.ports }}
+ - name: {{ $key }}
+ {{ toYaml $value | nindent 6 }}
+ {{- end }}
+ selector: {{- include "fluentd.matchLabels" . | nindent 4 }}
+ app.kubernetes.io/component: aggregator
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/templates/tls-certs.yaml b/deployments/helm/emcoOpenNESS/fluentd/templates/tls-certs.yaml
new file mode 100644
index 0000000..c37eb84
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/templates/tls-certs.yaml
@@ -0,0 +1,11 @@
+{{- if and (not .Values.tls.existingSecret) ( .Values.tls.enabled) }}
+apiVersion: v1
+kind: Secret
+metadata:
+ name: {{ include "fluentd.fullname" . }}-tls
+ labels: {{- include "fluentd.labels" . | nindent 4 }}
+type: kubernetes.io/tls
+data:
+ tls.crt: {{ required "A valid .Values.tls.certificate entry required!" .Values.tls.certificate | b64enc }}
+ tls.key: {{ required "A valid .Values.tls.key entry required!" .Values.tls.key | b64enc }}
+{{- end }}
diff --git a/deployments/helm/emcoOpenNESS/fluentd/values-production.yaml b/deployments/helm/emcoOpenNESS/fluentd/values-production.yaml
new file mode 100644
index 0000000..0df1dab
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/values-production.yaml
@@ -0,0 +1,454 @@
+## Global Docker image parameters
+## Please, note that this will override the image parameters, including dependencies, configured to use the global value
+## Current available global Docker image parameters: imageRegistry and imagePullSecrets
+##
+global: {}
+# imageRegistry: myRegistryName
+# imagePullSecrets:
+# - myRegistryKeySecretName
+
+## Bitnami Fluentd image version
+## ref: https://hub.docker.com/r/bitnami/fluentd/tags/
+##
+image:
+ registry: docker.io
+ repository: bitnami/fluentd
+ tag: 1.11.4-debian-10-r7
+ ## Specify a imagePullPolicy
+ ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
+ ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
+ ##
+ pullPolicy: IfNotPresent
+ ## Optionally specify an array of imagePullSecrets.
+ ## Secrets must be manually created in the namespace.
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+ ##
+ # pullSecrets:
+ # - myRegistryKeySecretName
+
+## String to partially override fluentd.fullname template (will maintain the release name)
+##
+# nameOverride:
+
+## String to fully override fluentd.fullname template
+##
+# fullnameOverride:
+
+## Cluster Domain
+##
+clusterDomain: cluster.local
+
+## Forwarder parameters
+##
+forwarder:
+ ## Enable forwarder daemonset
+ ##
+ enabled: true
+
+ ## Forwarder daemon user and group (set to root by default because it reads from host paths)
+ ##
+ daemonUser: root
+ daemonGroup: root
+
+ ## K8s Security Context for forwarder pods
+ ## https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+ ##
+ securityContext:
+ enabled: true
+ runAsUser: 0
+ fsGroup: 0
+
+ ## Name of the config file that will be used by Fluentd at launch
+ ## Fluentd will look for it under the /opt/bitnami/fluentd/conf directory
+ ##
+ configFile: fluentd.conf
+
+ ## Name of the configMap that contains the configuration files for fluentd
+ ## If not specified, one will be created by default
+ ##
+ # configMap:
+
+ ## String with extra arguments for the Fluentd command line
+ ## ref: https://docs.fluentd.org/deployment/command-line-option
+ ##
+ extraArgs: ""
+
+ ## Extra environment variables to pass to the container
+ ## extraEnv:
+ ## - name: MY_ENV_VAR
+ ## value: my_value
+ ##
+ extraEnv: []
+
+ ## Forwarder containers' ports
+ ##
+ containerPorts:
+ # - name: syslog-tcp
+ # containerPort: 5140
+ # protocol: TCP
+ # - name: syslog-udp
+ # containerPort: 5140
+ # protocol: UDP
+ # - name: tcp
+ # containerPort: 24224
+ # protocol: TCP
+ - name: http
+ containerPort: 9880
+ protocol: TCP
+
+ ## Service parameters
+ ##
+ service:
+ ## Service type
+ ##
+ type: ClusterIP
+
+ ## Service ports
+ ##
+ ports:
+ # syslog-udp:
+ # port: 5140
+ # targetPort: syslog-udp
+ # protocol: UDP
+ # nodePort: 31514
+ # syslog-tcp:
+ # port: 5140
+ # targetPort: syslog-tcp
+ # protocol: TCP
+ # nodePort: 31514
+ # tcp:
+ # port: 24224
+ # targetPort: tcp
+ # protocol: TCP
+ http:
+ port: 9880
+ targetPort: http
+ protocol: TCP
+
+ ## loadBalancerIP for the forwarders service (optional, cloud specific)
+ ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
+ ##
+ # loadBalancerIP:
+
+ ## Load Balancer sources
+ ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+ ##
+ # loadBalancerSourceRanges:
+ # - 10.10.10.0/24
+
+ ## Set the Cluster IP to use
+ ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#choosing-your-own-ip-address
+ ##
+ # clusterIP: None
+
+ ## Provide any additional annotations which may be required
+ ##
+ annotations: {}
+
+ ## Forwarder containers' liveness and readiness probes
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)
+ ##
+ livenessProbe:
+ enabled: true
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+ readinessProbe:
+ enabled: true
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+
+ ## Set up update strategy.
+ ## ref: https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/#daemonset-update-strategy
+ ## Example:
+ # updateStrategy:
+ # type: RollingUpdate
+ # rollingUpdate:
+ # maxSurge: 25%
+ # maxUnavailable: 25%
+ updateStrategy:
+ type: RollingUpdate
+
+ ## Forwarder containers' resource requests and limits
+ ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+ ##
+ resources:
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ limits: {}
+ # cpu: 500m
+ # memory: 1Gi
+ requests: {}
+ # cpu: 300m
+ # memory: 512Mi
+
+ ## Node labels for pod assignment
+ ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
+ ##
+ nodeSelector: {}
+
+ ## Tolerations for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+ ##
+ tolerations: []
+
+ ## Affinity for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+ ##
+ affinity: {}
+
+ ## Pod annotations
+ ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+ ##
+ podAnnotations: {}
+
+## Agregator parameters
+##
+aggregator:
+ ## Enable Aggregator daemonset
+ ##
+ enabled: true
+ ## Number of Aggregator replicas
+ ##
+ replicaCount: 2
+
+ ## K8s Security Context for Aggregator pods
+ ## https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+ ##
+ securityContext:
+ enabled: true
+ runAsUser: 1001
+ fsGroup: 1001
+
+ ## Name of the config file that will be used by Fluentd at launch
+ ## Fluentd will look for it under the /opt/bitnami/fluentd/conf directory
+ ##
+ configFile: fluentd.conf
+
+ ## Name of the configMap that contains the configuration files for fluentd
+ ## If not specified, one will be created by default
+ ##
+ # configMap:
+
+ ## Port the Aggregator container will listen for logs. Leave it blank to ignore.
+ ## You can specify other ports in the aggregator.containerPorts parameter
+ ##
+ port: 24224
+
+ ## String with extra arguments for the Fluentd command line
+ ## ref: https://docs.fluentd.org/deployment/command-line-option
+ ##
+ extraArgs: ""
+
+ ## Extra environment variables to pass to the container
+ ## extraEnv:
+ ## - name: MY_ENV_VAR
+ ## value: my_value
+ ##
+ extraEnv: []
+
+ ## Aggregator containers' ports
+ ##
+ containerPorts:
+ # - name: my-port
+ # containerPort: 24222
+ # protocol: TCP
+ - name: http
+ containerPort: 9880
+ protocol: TCP
+
+ ## Service parameters
+ ##
+ service:
+ ## Service type
+ ##
+ type: ClusterIP
+
+ ## Service ports
+ ##
+ ports:
+ # http:
+ # port: 9880
+ # targetPort: http
+ # protocol: TCP
+ tcp:
+ port: 24224
+ targetPort: tcp
+ protocol: TCP
+
+ ## loadBalancerIP for the forwarders service (optional, cloud specific)
+ ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
+ ##
+ # loadBalancerIP:
+
+ ## Load Balancer sources
+ ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+ ##
+ # loadBalancerSourceRanges:
+ # - 10.10.10.0/24
+
+ ## Set the Cluster IP to use
+ ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#choosing-your-own-ip-address
+ ##
+ # clusterIP: None
+
+ ## Provide any additional annotations which may be required
+ ##
+ annotations: {}
+
+ ## Configure extra options for liveness and readiness probes
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)
+ ##
+ livenessProbe:
+ enabled: true
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+ readinessProbe:
+ enabled: true
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+
+ ## Set up update strategy.
+ ## ref: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets
+ ## Example:
+ # updateStrategy:
+ # type: RollingUpdate
+ # rollingUpdate:
+ # maxSurge: 25%
+ # maxUnavailable: 25%
+ updateStrategy:
+ type: RollingUpdate
+
+ ## Aggregator containers' resource requests and limits
+ ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+ ##
+ resources:
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ limits: {}
+ # cpu: 500m
+ # memory: 1Gi
+ requests: {}
+ # cpu: 300m
+ # memory: 512Mi
+
+ ## Node labels for pod assignment
+ ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
+ ##
+ nodeSelector: {}
+
+ ## Tolerations for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+ ##
+ tolerations: []
+
+ ## Affinity for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+ ##
+ affinity: {}
+
+ ## Pod annotations
+ ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+ ##
+ podAnnotations: {}
+
+ ## Persist data to a persistent volume
+ persistence:
+ enabled: false
+ ## If defined, storageClassName:
+ ## If set to "-", storageClassName: "", which disables dynamic provisioning
+ ## If undefined (the default) or set to null, no storageClassName spec is
+ ## set, choosing the default provisioner. (gp2 on AWS, standard on
+ ## GKE, AWS & OpenStack)
+ ##
+ # storageClass: "-"
+ accessMode: ReadWriteOnce
+ size: 10Gi
+
+## Pods Service Account
+## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
+##
+serviceAccount:
+ ## Specifies whether a ServiceAccount should be created
+ ##
+ create: true
+ ## The name of the ServiceAccount to use.
+ ## If not set and create is true, a name is generated using the fluentd.fullname template
+ # name:
+
+## Role Based Access
+## ref: https://kubernetes.io/docs/admin/authorization/rbac/
+##
+rbac:
+ create: true
+
+## Prometheus Exporter / Metrics
+##
+metrics:
+ enabled: true
+ ## Prometheus Exporter service parameters
+ ##
+ service:
+ ## Service type
+ ##
+ type: ClusterIP
+ ## Service port
+ ##
+ port: 24231
+ ## loadBalancerIP for the Prometheus Exporter service (optional, cloud specific)
+ ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
+ ##
+ # loadBalancerIP:
+ ## Annotations for the Prometheus Exporter service service
+ ##
+ annotations:
+ prometheus.io/scrape: "true"
+ prometheus.io/port: "24231"
+ prometheus.io/path: "/metrics"
+
+ ## Prometheus Operator ServiceMonitor configuration
+ ##
+ serviceMonitor:
+ enabled: false
+ ## Namespace in which Prometheus is running
+ ##
+ # namespace: monitoring
+
+ ## Interval at which metrics should be scraped.
+ ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
+ ##
+ # interval: 10s
+
+ ## Timeout after which the scrape is ended
+ ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
+ ##
+ # scrapeTimeout: 10s
+
+ ## ServiceMonitor selector labels
+ ## ref: https://github.com/bitnami/charts/tree/master/bitnami/prometheus-operator#prometheus-configuration
+ ##
+ # selector:
+ # prometheus: my-prometheus
+
+## Mount TLS certificates
+##
+tls:
+ enabled: false
+ certificate: |-
+ key: |-
+ # existingSecret: name-of-existing-secret-to-certificates
diff --git a/deployments/helm/emcoOpenNESS/fluentd/values.yaml b/deployments/helm/emcoOpenNESS/fluentd/values.yaml
new file mode 100644
index 0000000..6f9770d
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/fluentd/values.yaml
@@ -0,0 +1,454 @@
+## Global Docker image parameters
+## Please, note that this will override the image parameters, including dependencies, configured to use the global value
+## Current available global Docker image parameters: imageRegistry and imagePullSecrets
+##
+global: {}
+# imageRegistry: myRegistryName
+# imagePullSecrets:
+# - myRegistryKeySecretName
+
+## Bitnami Fluentd image version
+## ref: https://hub.docker.com/r/bitnami/fluentd/tags/
+##
+image:
+ registry: docker.io
+ repository: bitnami/fluentd
+ tag: 1.11.4-debian-10-r7
+ ## Specify a imagePullPolicy
+ ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
+ ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
+ ##
+ pullPolicy: IfNotPresent
+ ## Optionally specify an array of imagePullSecrets.
+ ## Secrets must be manually created in the namespace.
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+ ##
+ # pullSecrets:
+ # - myRegistryKeySecretName
+
+## String to partially override fluentd.fullname template (will maintain the release name)
+##
+# nameOverride:
+
+## String to fully override fluentd.fullname template
+##
+# fullnameOverride:
+
+## Cluster Domain
+##
+clusterDomain: cluster.local
+
+## Forwarder parameters
+##
+forwarder:
+ ## Enable forwarder daemonset
+ ##
+ enabled: true
+
+ ## Forwarder daemon user and group (set to root by default because it reads from host paths)
+ ##
+ daemonUser: root
+ daemonGroup: root
+
+ ## K8s Security Context for forwarder pods
+ ## https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+ ##
+ securityContext:
+ enabled: true
+ runAsUser: 0
+ fsGroup: 0
+
+ ## Name of the config file that will be used by Fluentd at launch
+ ## Fluentd will look for it under the /opt/bitnami/fluentd/conf directory
+ ##
+ configFile: fluentd.conf
+
+ ## Name of the configMap that contains the configuration files for fluentd
+ ## If not specified, one will be created by default
+ ##
+ # configMap:
+
+ ## String with extra arguments for the Fluentd command line
+ ## ref: https://docs.fluentd.org/deployment/command-line-option
+ ##
+ extraArgs: ""
+
+ ## Extra environment variables to pass to the container
+ ## extraEnv:
+ ## - name: MY_ENV_VAR
+ ## value: my_value
+ ##
+ extraEnv: []
+
+ ## Forwarder containers' ports
+ ##
+ containerPorts:
+ # - name: syslog-tcp
+ # containerPort: 5140
+ # protocol: TCP
+ # - name: syslog-udp
+ # containerPort: 5140
+ # protocol: UDP
+ # - name: tcp
+ # containerPort: 24224
+ # protocol: TCP
+ - name: http
+ containerPort: 9880
+ protocol: TCP
+
+ ## Service parameters
+ ##
+ service:
+ ## Service type
+ ##
+ type: ClusterIP
+
+ ## Service ports
+ ##
+ ports:
+ # syslog-udp:
+ # port: 5140
+ # targetPort: syslog-udp
+ # protocol: UDP
+ # nodePort: 31514
+ # syslog-tcp:
+ # port: 5140
+ # targetPort: syslog-tcp
+ # protocol: TCP
+ # nodePort: 31514
+ # tcp:
+ # port: 24224
+ # targetPort: tcp
+ # protocol: TCP
+ http:
+ port: 9880
+ targetPort: http
+ protocol: TCP
+
+ ## loadBalancerIP for the forwarders service (optional, cloud specific)
+ ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
+ ##
+ # loadBalancerIP:
+
+ ## Load Balancer sources
+ ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+ ##
+ # loadBalancerSourceRanges:
+ # - 10.10.10.0/24
+
+ ## Set the Cluster IP to use
+ ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#choosing-your-own-ip-address
+ ##
+ # clusterIP: None
+
+ ## Provide any additional annotations which may be required
+ ##
+ annotations: {}
+
+ ## Forwarder containers' liveness and readiness probes
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)
+ ##
+ livenessProbe:
+ enabled: true
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+ readinessProbe:
+ enabled: true
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+
+ ## Set up update strategy.
+ ## ref: https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/#daemonset-update-strategy
+ ## Example:
+ # updateStrategy:
+ # type: RollingUpdate
+ # rollingUpdate:
+ # maxSurge: 25%
+ # maxUnavailable: 25%
+ updateStrategy:
+ type: RollingUpdate
+
+ ## Forwarder containers' resource requests and limits
+ ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+ ##
+ resources:
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ limits: {}
+ # cpu: 500m
+ # memory: 1Gi
+ requests: {}
+ # cpu: 300m
+ # memory: 512Mi
+
+ ## Node labels for pod assignment
+ ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
+ ##
+ nodeSelector: {}
+
+ ## Tolerations for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+ ##
+ tolerations: []
+
+ ## Affinity for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+ ##
+ affinity: {}
+
+ ## Pod annotations
+ ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+ ##
+ podAnnotations: {}
+
+## Agregator parameters
+##
+aggregator:
+ ## Enable Aggregator daemonset
+ ##
+ enabled: true
+ ## Number of Aggregator replicas
+ ##
+ replicaCount: 1
+
+ ## K8s Security Context for Aggregator pods
+ ## https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
+ ##
+ securityContext:
+ enabled: true
+ runAsUser: 1001
+ fsGroup: 1001
+
+ ## Name of the config file that will be used by Fluentd at launch
+ ## Fluentd will look for it under the /opt/bitnami/fluentd/conf directory
+ ##
+ configFile: fluentd.conf
+
+ ## Name of the configMap that contains the configuration files for fluentd
+ ## If not specified, one will be created by default
+ ##
+ # configMap:
+
+ ## Port the Aggregator container will listen for logs. Leave it blank to ignore.
+ ## You can specify other ports in the aggregator.containerPorts parameter
+ ##
+ port: 24224
+
+ ## String with extra arguments for the Fluentd command line
+ ## ref: https://docs.fluentd.org/deployment/command-line-option
+ ##
+ extraArgs: ""
+
+ ## Extra environment variables to pass to the container
+ ## extraEnv:
+ ## - name: MY_ENV_VAR
+ ## value: my_value
+ ##
+ extraEnv: []
+
+ ## Aggregator containers' ports
+ ##
+ containerPorts:
+ # - name: my-port
+ # containerPort: 24222
+ # protocol: TCP
+ - name: http
+ containerPort: 9880
+ protocol: TCP
+
+ ## Service parameters
+ ##
+ service:
+ ## Service type
+ ##
+ type: ClusterIP
+
+ ## Service ports
+ ##
+ ports:
+ # http:
+ # port: 9880
+ # targetPort: http
+ # protocol: TCP
+ tcp:
+ port: 24224
+ targetPort: tcp
+ protocol: TCP
+
+ ## loadBalancerIP for the forwarders service (optional, cloud specific)
+ ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
+ ##
+ # loadBalancerIP:
+
+ ## Load Balancer sources
+ ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
+ ##
+ # loadBalancerSourceRanges:
+ # - 10.10.10.0/24
+
+ ## Set the Cluster IP to use
+ ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#choosing-your-own-ip-address
+ ##
+ # clusterIP: None
+
+ ## Provide any additional annotations which may be required
+ ##
+ annotations: {}
+
+ ## Configure extra options for liveness and readiness probes
+ ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)
+ ##
+ livenessProbe:
+ enabled: true
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+ readinessProbe:
+ enabled: true
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+
+ ## Set up update strategy.
+ ## ref: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets
+ ## Example:
+ # updateStrategy:
+ # type: RollingUpdate
+ # rollingUpdate:
+ # maxSurge: 25%
+ # maxUnavailable: 25%
+ updateStrategy:
+ type: RollingUpdate
+
+ ## Aggregator containers' resource requests and limits
+ ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
+ ##
+ resources:
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ limits: {}
+ # cpu: 500m
+ # memory: 1Gi
+ requests: {}
+ # cpu: 300m
+ # memory: 512Mi
+
+ ## Node labels for pod assignment
+ ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
+ ##
+ nodeSelector: {}
+
+ ## Tolerations for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+ ##
+ tolerations: []
+
+ ## Affinity for pod assignment
+ ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+ ##
+ affinity: {}
+
+ ## Pod annotations
+ ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
+ ##
+ podAnnotations: {}
+
+ ## Persist data to a persistent volume
+ persistence:
+ enabled: false
+ ## If defined, storageClassName:
+ ## If set to "-", storageClassName: "", which disables dynamic provisioning
+ ## If undefined (the default) or set to null, no storageClassName spec is
+ ## set, choosing the default provisioner. (gp2 on AWS, standard on
+ ## GKE, AWS & OpenStack)
+ ##
+ # storageClass: "-"
+ accessMode: ReadWriteOnce
+ size: 10Gi
+
+## Pods Service Account
+## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
+##
+serviceAccount:
+ ## Specifies whether a ServiceAccount should be created
+ ##
+ create: true
+ ## The name of the ServiceAccount to use.
+ ## If not set and create is true, a name is generated using the fluentd.fullname template
+ # name:
+
+## Role Based Access
+## ref: https://kubernetes.io/docs/admin/authorization/rbac/
+##
+rbac:
+ create: true
+
+## Prometheus Exporter / Metrics
+##
+metrics:
+ enabled: false
+ ## Prometheus Exporter service parameters
+ ##
+ service:
+ ## Service type
+ ##
+ type: ClusterIP
+ ## Service port
+ ##
+ port: 24231
+ ## loadBalancerIP for the Prometheus Exporter service (optional, cloud specific)
+ ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer
+ ##
+ # loadBalancerIP:
+ ## Annotations for the Prometheus Exporter service service
+ ##
+ annotations:
+ prometheus.io/scrape: "true"
+ prometheus.io/port: "24231"
+ prometheus.io/path: "/metrics"
+
+ ## Prometheus Operator ServiceMonitor configuration
+ ##
+ serviceMonitor:
+ enabled: false
+ ## Namespace in which Prometheus is running
+ ##
+ # namespace: monitoring
+
+ ## Interval at which metrics should be scraped.
+ ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
+ ##
+ # interval: 10s
+
+ ## Timeout after which the scrape is ended
+ ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
+ ##
+ # scrapeTimeout: 10s
+
+ ## ServiceMonitor selector labels
+ ## ref: https://github.com/bitnami/charts/tree/master/bitnami/prometheus-operator#prometheus-configuration
+ ##
+ # selector:
+ # prometheus: my-prometheus
+
+## Mount TLS certificates
+##
+tls:
+ enabled: false
+ certificate: |-
+ key: |-
+ # existingSecret: name-of-existing-secret-to-certificates
diff --git a/deployments/helm/emcoOpenNESS/gac/Chart.yaml b/deployments/helm/emcoOpenNESS/gac/Chart.yaml
new file mode 100644
index 0000000..2dec607
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Generic Action Controller
+name: gac
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/gac/requirements.yaml b/deployments/helm/emcoOpenNESS/gac/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/gac/resources/config/config.json b/deployments/helm/emcoOpenNESS/gac/resources/config/config.json
new file mode 100644
index 0000000..22644cb
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/resources/config/config.json
@@ -0,0 +1,6 @@
+{
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9020"
+}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/gac/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/gac/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/gac/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/gac/templates/deployment.yaml
new file mode 100644
index 0000000..e8bc84f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/templates/deployment.yaml
@@ -0,0 +1,74 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ selector:
+ matchLabels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ replicas: {{ .Values.replicaCount }}
+ template:
+ metadata:
+ labels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ spec:
+ containers:
+ - image: "{{ include "common.repository" . }}/{{ .Values.image }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ name: {{ include "common.name" . }}
+ command: [{{ .Values.command }}]
+ args: [{{ .Values.args }}]
+ workingDir: {{ .Values.workingDir }}
+ ports:
+ - containerPort: {{ .Values.serviceInternal.internalPort }}
+ - containerPort: {{ .Values.service.internalPort }}
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ {{ end }}
+ readinessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readiness.periodSeconds }}
+ volumeMounts:
+ - mountPath: /etc/localtime
+ name: localtime
+ readOnly: true
+ - mountPath: {{ .Values.workingDir }}/config.json
+ name: {{ include "common.name" .}}
+ subPath: config.json
+ resources:
+{{ include "common.resources" . }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector }}
+ {{- end -}}
+ {{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity }}
+ {{- end }}
+ volumes:
+ - name: localtime
+ hostPath:
+ path: /etc/localtime
+ - name : {{ include "common.name" . }}
+ configMap:
+ name: {{ include "common.fullname" . }}
+ imagePullSecrets:
+ - name: "{{ include "common.namespace" . }}-docker-registry-key"
diff --git a/deployments/helm/emcoOpenNESS/gac/templates/service.yaml b/deployments/helm/emcoOpenNESS/gac/templates/service.yaml
new file mode 100644
index 0000000..afc8239
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/templates/service.yaml
@@ -0,0 +1,38 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.fullname" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - name: {{ .Values.serviceInternal.portName }}
+ {{if eq .Values.serviceInternal.type "NodePort" -}}
+ port: {{ .Values.serviceInternal.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.serviceInternal.nodePort }}
+ {{- else -}}
+ port: {{ .Values.serviceInternal.externalPort }}
+ targetPort: {{ .Values.serviceInternal.internalPort }}
+ {{- end}}
+ protocol: TCP
+ - name: {{ .Values.service.portName }}
+ {{if eq .Values.service.type "NodePort" -}}
+ port: {{ .Values.service.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.service.nodePort }}
+ {{- else -}}
+ port: {{ .Values.service.externalPort }}
+ targetPort: {{ .Values.service.internalPort }}
+ {{- end}}
+ protocol: TCP
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/gac/values.yaml b/deployments/helm/emcoOpenNESS/gac/values.yaml
new file mode 100644
index 0000000..253c7ab
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/gac/values.yaml
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-gac:latest
+pullPolicy: Always
+command: "./genericactioncontroller"
+args: ""
+workingDir: /opt/emco/gac
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: gac
+ portName: http
+ internalPort: 9020
+ externalPort: 9020
+ nodePort: 91
+
+serviceInternal:
+ type: NodePort
+ name: internal
+ portName: internal
+ internalPort: 9033
+ externalPort: 9033
+ nodePort: 93
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/mongo/Chart.yaml b/deployments/helm/emcoOpenNESS/mongo/Chart.yaml
new file mode 100644
index 0000000..da92211
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/Chart.yaml
@@ -0,0 +1,18 @@
+# Copyright © 2018 Orange
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+description: MongoDB Server
+name: mongo
+version: 4.0.8
diff --git a/deployments/helm/emcoOpenNESS/mongo/requirements.yaml b/deployments/helm/emcoOpenNESS/mongo/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/mongo/templates/nfs-provisoner.yaml b/deployments/helm/emcoOpenNESS/mongo/templates/nfs-provisoner.yaml
new file mode 100644
index 0000000..355ad38
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/templates/nfs-provisoner.yaml
@@ -0,0 +1,78 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{ if not .Values.disableNfsProvisioner }}
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ #replicas: {{ .Values.replicaCount }}
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ app: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+ release: {{ .Release.Name }}
+ spec:
+ containers:
+ - name: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+ image: "{{ .Values.global.nfsprovisionerRepository | default .Values.nfsprovisionerRepository }}/{{ .Values.nfsprovisionerImage }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ ports:
+ - name: nfs
+ containerPort: {{ .Values.service.nfsPort }}
+ - name: mountd
+ containerPort: {{ .Values.service.mountdPort }}
+ - name: rpcbind
+ containerPort: {{ .Values.service.rpcbindPort }}
+ - name: rpcbind-udp
+ containerPort: {{ .Values.service.rpcbindUdpPort }}
+ protocol: UDP
+ securityContext:
+ capabilities:
+ add:
+ - DAC_READ_SEARCH
+ - SYS_RESOURCE
+ args:
+ - "-provisioner={{ include "common.fullname" . }}/nfs"
+ env:
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: SERVICE_NAME
+ value: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ volumeMounts:
+ - name: export-volume
+ mountPath: /export
+ volumes:
+ - name: export-volume
+ hostPath:
+ path: {{ .Values.global.persistence.mountPath | default .Values.persistence.mountPath }}/{{ .Release.Name }}/{{ .Values.persistence.mountSubPath }}
+{{ end }}
diff --git a/deployments/helm/emcoOpenNESS/mongo/templates/pv.yaml b/deployments/helm/emcoOpenNESS/mongo/templates/pv.yaml
new file mode 100644
index 0000000..824dcbb
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/templates/pv.yaml
@@ -0,0 +1,38 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{- if (and (and (.Values.persistence.enabled) (not .Values.persistence.existingClaim)) ( .Values.disableNfsProvisioner)) -}}
+kind: PersistentVolume
+apiVersion: v1
+metadata:
+ name: {{ include "common.fullname" . }}-data
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
+ release: "{{ .Release.Name }}"
+ heritage: "{{ .Release.Service }}"
+ name: {{ include "common.fullname" . }}
+spec:
+ capacity:
+ storage: {{ .Values.persistence.size}}
+ accessModes:
+ - {{ .Values.persistence.accessMode }}
+ storageClassName: "{{ include "common.fullname" . }}-data"
+ persistentVolumeReclaimPolicy: {{ .Values.persistence.volumeReclaimPolicy }}
+ hostPath:
+ path: {{ .Values.global.persistence.mountPath | default .Values.persistence.mountPath }}/{{ .Release.Name }}/{{ .Values.persistence.mountSubPath }}
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/mongo/templates/pvc.yaml b/deployments/helm/emcoOpenNESS/mongo/templates/pvc.yaml
new file mode 100644
index 0000000..372c106
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/templates/pvc.yaml
@@ -0,0 +1,43 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) -}}
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+ name: {{ include "common.fullname" . }}-data
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.fullname" . }}
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
+ release: "{{ .Release.Name }}"
+ heritage: "{{ .Release.Service }}"
+ name: {{ include "common.fullname" . }}
+{{- if .Values.persistence.annotations }}
+ annotations:
+{{ toYaml .Values.persistence.annotations | indent 4 }}
+{{- end }}
+spec:
+ accessModes:
+ - {{ .Values.persistence.accessMode }}
+ resources:
+ requests:
+ storage: {{ .Values.persistence.size }}
+ selector:
+ matchLabels:
+ name: {{ include "common.fullname" . }}
+ storageClassName: "{{ include "common.fullname" . }}-data"
+{{- end -}}
diff --git a/deployments/helm/emcoOpenNESS/mongo/templates/service.yaml b/deployments/helm/emcoOpenNESS/mongo/templates/service.yaml
new file mode 100644
index 0000000..df55854
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/templates/service.yaml
@@ -0,0 +1,97 @@
+{{/*
+# Copyright © 2018 Orange
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ ports:
+ - port: {{ .Values.service.internalPort }}
+ name: {{ .Values.service.portName }}
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ clusterIP: None
+#{{ if not .Values.disableNfsProvisioner }}
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+spec:
+ ports:
+ - name: nfs
+ port: {{ .Values.service.nfsPort }}
+ - name: mountd
+ port: {{ .Values.service.mountdPort }}
+ - name: rpcbind
+ port: {{ .Values.service.rpcbindPort }}
+ - name: rpcbind-udp
+ port: {{ .Values.service.rpcbindUdpPort }}
+ protocol: UDP
+ selector:
+ app: {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+#{{ end }}
+---
+# Client service for connecting to any Mongo instance for reads.
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}-read
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+spec:
+ ports:
+ - port: {{ .Values.service.internalPort }}
+ name: {{ .Values.service.portName }}
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+---
+{{ if .Values.geoEnabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}-nodeport
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-0
+spec:
+ ports:
+ - name: {{ .Values.service.internalPort }}
+ port: {{ .Values.service.internalPort }}
+ targetPort: {{ .Values.service.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.service.externalPort1 }}
+ - name: {{ .Values.xtrabackup.internalPort }}
+ port: {{ .Values.xtrabackup.internalPort }}
+ targetPort: {{ .Values.xtrabackup.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.service.externalPort2 }}
+ type: NodePort
+ selector:
+ statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-0
+ release: {{ .Release.Name }}
+{{ end }}
diff --git a/deployments/helm/emcoOpenNESS/mongo/templates/statefulset.yaml b/deployments/helm/emcoOpenNESS/mongo/templates/statefulset.yaml
new file mode 100644
index 0000000..56f669e
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/templates/statefulset.yaml
@@ -0,0 +1,108 @@
+{{/*
+# Copyright © 2018 Orange
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ serviceName: {{ .Values.service.name }}
+ replicas: {{ .Values.replicaCount }}
+ selector:
+ matchLabels:
+ release: "{{ .Release.Name }}"
+ app: {{ include "common.name" . }}
+ template:
+ metadata:
+ labels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ spec:
+ initContainers:
+#{{ if not .Values.disableNfsProvisioner }}
+ - name: {{ include "common.name" . }}-readiness
+ command:
+ - /root/ready.py
+ args:
+ - --container-name
+ - {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
+ env:
+ - name: NAMESPACE
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.namespace
+ image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+#{{ end }}
+
+ containers:
+ - name: {{ include "common.name" . }}
+ image: "{{ .Values.dockerHubRepository }}/{{ .Values.image }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ env:
+ - name: MONGO_INITDB_DATABASE
+ value: "{{ .Values.config.dbName }}"
+ ports:
+ - containerPort: {{ .Values.service.internalPort }}
+ # disable liveness probe when breakpoints set in debugger
+ # so K8s doesn't restart unresponsive container
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ exec:
+ command:
+ - mongo
+ - --eval
+ - "db.adminCommand('ping')"
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ timeoutSeconds: {{ .Values.liveness.timeoutSeconds }}
+ {{end }}
+ readinessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readiness.periodSeconds }}
+ volumeMounts:
+ - mountPath: /data/db
+ name: {{ include "common.fullname" . }}-data
+ resources:
+{{ include "common.resources" . | indent 12 }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector | indent 10 }}
+ {{- end -}}
+ {{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity | indent 10 }}
+ {{- end }}
+ volumes:
+ - name: localtime
+ hostPath:
+ path: /etc/localtime
+ - name: {{ include "common.fullname" . }}-data
+#{{ if .Values.persistence.enabled }}
+ persistentVolumeClaim:
+ claimName: {{ include "common.fullname" . }}-data
+#{{ else }}
+ emptyDir: {}
+#{{ end }}
diff --git a/deployments/helm/emcoOpenNESS/mongo/templates/storageclass.yaml b/deployments/helm/emcoOpenNESS/mongo/templates/storageclass.yaml
new file mode 100644
index 0000000..3cd502e
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/templates/storageclass.yaml
@@ -0,0 +1,24 @@
+{{/*
+# Copyright © 2017 Amdocs, Bell Canada
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/}}
+
+{{ if not .Values.disableNfsProvisioner }}
+kind: StorageClass
+apiVersion: storage.k8s.io/v1
+metadata:
+ name: "{{ include "common.fullname" . }}-data"
+ namespace: {{ include "common.namespace" . }}
+provisioner: {{ include "common.fullname" . }}/nfs
+{{ end }}
diff --git a/deployments/helm/emcoOpenNESS/mongo/values.yaml b/deployments/helm/emcoOpenNESS/mongo/values.yaml
new file mode 100644
index 0000000..5edbf4f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/mongo/values.yaml
@@ -0,0 +1,107 @@
+# Copyright © 2018 Orange
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefix: 302
+ persistence: {}
+ readinessRepository: oomk8s
+ readinessImage: readiness-check:2.2.2
+
+
+#################################################################
+# Application configuration defaults.
+#################################################################
+
+dockerHubRepository: registry.hub.docker.com
+image: library/mongo:4.4.1
+pullPolicy: Always
+
+# application configuration
+config:
+ dbName: mongo
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+disableNfsProvisioner: true
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 30
+ periodSeconds: 10
+ timeoutSeconds: 5
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 5
+ periodSeconds: 10
+
+## Persist data to a persitent volume
+persistence:
+ enabled: false
+ volumeReclaimPolicy: Retain
+ accessMode: ReadWriteMany
+ size: 1Gi
+ mountPath: /dockerdata-nfs
+ mountSubPath: "mongo/data"
+
+service:
+ name: emco-mongo
+ portName: mongo
+ internalPort: 27017
+ # nfs provisioner ports
+ nfsPort: 2049
+ mountdPort: 20048
+ rpcbindPort: 111
+ rpcbindUdpPort: 111
+
+ingress:
+ enabled: false
+
+resources: {}
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ #
+ # Example:
+ # Configure resource requests and limits
+ # ref: http://kubernetes.io/docs/user-guide/compute-resources/
+ # Minimum memory for development is 2 CPU cores and 4GB memory
+ # Minimum memory for production is 4 CPU cores and 8GB memory
+#resources:
+# limits:
+# cpu: 2
+# memory: 4Gi
+# requests:
+# cpu: 2
+# memory: 4Gi
+
+
+nfsprovisionerRepository: quay.io
+nfsprovisionerImage: kubernetes_incubator/nfs-provisioner:v2.3.0
+nfsprovisionerPrefix: mongo
+
+sdnctlPrefix: mongo
+
+geoEnabled: false
+geoSiteId: 1
diff --git a/deployments/helm/emcoOpenNESS/ncm/Chart.yaml b/deployments/helm/emcoOpenNESS/ncm/Chart.yaml
new file mode 100644
index 0000000..0ff152f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Network Configuration Manager
+name: ncm
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/ncm/requirements.yaml b/deployments/helm/emcoOpenNESS/ncm/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/ncm/resources/config/config.json b/deployments/helm/emcoOpenNESS/ncm/resources/config/config.json
new file mode 100644
index 0000000..c90858c
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/resources/config/config.json
@@ -0,0 +1,8 @@
+{
+
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9081"
+}
+
diff --git a/deployments/helm/emcoOpenNESS/ncm/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/ncm/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/ncm/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/ncm/templates/deployment.yaml
new file mode 100644
index 0000000..c3acae4
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/templates/deployment.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.deployment" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/ncm/templates/service.yaml b/deployments/helm/emcoOpenNESS/ncm/templates/service.yaml
new file mode 100644
index 0000000..8dc285f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/templates/service.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.servicemco" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/ncm/values.yaml b/deployments/helm/emcoOpenNESS/ncm/values.yaml
new file mode 100644
index 0000000..449e399
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ncm/values.yaml
@@ -0,0 +1,73 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-ncm:latest
+pullPolicy: Always
+args: ""
+command: "./ncm"
+workingDir: /opt/emco/ncm
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: ncm
+ portName: ncm
+ internalPort: 9081
+ externalPort: 9081
+ nodePort: 31
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/Chart.yaml b/deployments/helm/emcoOpenNESS/orchestrator/Chart.yaml
new file mode 100644
index 0000000..39a2fc9
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Orchestrator
+name: orchestrator
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/requirements.yaml b/deployments/helm/emcoOpenNESS/orchestrator/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/resources/config/config.json b/deployments/helm/emcoOpenNESS/orchestrator/resources/config/config.json
new file mode 100644
index 0000000..83b035e
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/resources/config/config.json
@@ -0,0 +1,6 @@
+{
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9015"
+}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/orchestrator/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/orchestrator/templates/deployment.yaml
new file mode 100644
index 0000000..c3acae4
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/templates/deployment.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.deployment" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/templates/service.yaml b/deployments/helm/emcoOpenNESS/orchestrator/templates/service.yaml
new file mode 100644
index 0000000..8dc285f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/templates/service.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.servicemco" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/orchestrator/values.yaml b/deployments/helm/emcoOpenNESS/orchestrator/values.yaml
new file mode 100644
index 0000000..4cb6468
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/orchestrator/values.yaml
@@ -0,0 +1,74 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-orch:latest
+pullPolicy: Always
+args: ""
+command: "./orchestrator"
+workingDir: /opt/emco/orchestrator
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: orchestrator
+ portName: orchestrator
+ internalPort: 9015
+ externalPort: 9015
+ nodePort: 15
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/Chart.yaml b/deployments/helm/emcoOpenNESS/ovnaction/Chart.yaml
new file mode 100644
index 0000000..56a0b8a
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Ovn Action Controller
+name: ovnaction
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/requirements.yaml b/deployments/helm/emcoOpenNESS/ovnaction/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/resources/config/config.json b/deployments/helm/emcoOpenNESS/ovnaction/resources/config/config.json
new file mode 100644
index 0000000..1fdfafc
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/resources/config/config.json
@@ -0,0 +1,6 @@
+{
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9051"
+}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/ovnaction/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/ovnaction/templates/deployment.yaml
new file mode 100644
index 0000000..1e56812
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/templates/deployment.yaml
@@ -0,0 +1,74 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ selector:
+ matchLabels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ replicas: {{ .Values.replicaCount }}
+ template:
+ metadata:
+ labels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ spec:
+ containers:
+ - image: "{{ include "common.repository" . }}/{{ .Values.image }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ name: {{ include "common.name" . }}
+ command: [{{ .Values.command }}]
+ args: [{{ .Values.args }}]
+ workingDir: {{ .Values.workingDir }}
+ ports:
+ - containerPort: {{ .Values.serviceInternal.internalPort }}
+ - containerPort: {{ .Values.service.internalPort }}
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ {{ end }}
+ readinessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readiness.periodSeconds }}
+ volumeMounts:
+ - mountPath: /etc/localtime
+ name: localtime
+ readOnly: true
+ - mountPath: {{ .Values.workingDir }}/config.json
+ name: {{ include "common.name" .}}
+ subPath: config.json
+ resources:
+{{ include "common.resources" . }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector }}
+ {{- end -}}
+ {{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity }}
+ {{- end }}
+ volumes:
+ - name: localtime
+ hostPath:
+ path: /etc/localtime
+ - name : {{ include "common.name" . }}
+ configMap:
+ name: {{ include "common.fullname" . }}
+ imagePullSecrets:
+ - name: "{{ include "common.namespace" . }}-docker-registry-key"
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/templates/service.yaml b/deployments/helm/emcoOpenNESS/ovnaction/templates/service.yaml
new file mode 100644
index 0000000..afc8239
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/templates/service.yaml
@@ -0,0 +1,38 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.servicename" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.fullname" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - name: {{ .Values.serviceInternal.portName }}
+ {{if eq .Values.serviceInternal.type "NodePort" -}}
+ port: {{ .Values.serviceInternal.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.serviceInternal.nodePort }}
+ {{- else -}}
+ port: {{ .Values.serviceInternal.externalPort }}
+ targetPort: {{ .Values.serviceInternal.internalPort }}
+ {{- end}}
+ protocol: TCP
+ - name: {{ .Values.service.portName }}
+ {{if eq .Values.service.type "NodePort" -}}
+ port: {{ .Values.service.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefixExt | default "302" }}{{ .Values.service.nodePort }}
+ {{- else -}}
+ port: {{ .Values.service.externalPort }}
+ targetPort: {{ .Values.service.internalPort }}
+ {{- end}}
+ protocol: TCP
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/ovnaction/values.yaml b/deployments/helm/emcoOpenNESS/ovnaction/values.yaml
new file mode 100644
index 0000000..b3ef267
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/ovnaction/values.yaml
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-ovn:latest
+pullPolicy: Always
+args: ""
+command: "./ovnaction"
+workingDir: /opt/emco/ovnaction
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: ovnaction
+ portName: http
+ internalPort: 9051
+ externalPort: 9051
+ nodePort: 71
+
+serviceInternal:
+ type: NodePort
+ name: internal
+ portName: internal
+ internalPort: 9053
+ externalPort: 9053
+ nodePort: 73
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/emcoOpenNESS/rsync/Chart.yaml b/deployments/helm/emcoOpenNESS/rsync/Chart.yaml
new file mode 100644
index 0000000..b8e75f7
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/Chart.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+apiVersion: v1
+description: Resource Synchronizer
+name: rsync
+version: 0.1.0
diff --git a/deployments/helm/emcoOpenNESS/rsync/requirements.yaml b/deployments/helm/emcoOpenNESS/rsync/requirements.yaml
new file mode 100644
index 0000000..466f833
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/requirements.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/emcoOpenNESS/rsync/resources/config/config.json b/deployments/helm/emcoOpenNESS/rsync/resources/config/config.json
new file mode 100644
index 0000000..46d6f7c
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/resources/config/config.json
@@ -0,0 +1,5 @@
+{
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd"
+}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/rsync/templates/configmap.yaml b/deployments/helm/emcoOpenNESS/rsync/templates/configmap.yaml
new file mode 100644
index 0000000..b7ccb17
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/templates/configmap.yaml
@@ -0,0 +1,17 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/emcoOpenNESS/rsync/templates/deployment.yaml b/deployments/helm/emcoOpenNESS/rsync/templates/deployment.yaml
new file mode 100644
index 0000000..c3acae4
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/templates/deployment.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.deployment" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/rsync/templates/service.yaml b/deployments/helm/emcoOpenNESS/rsync/templates/service.yaml
new file mode 100644
index 0000000..8dc285f
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/templates/service.yaml
@@ -0,0 +1,5 @@
+{{/*
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+*/}}
+{{- template "common.servicemco" . -}}
\ No newline at end of file
diff --git a/deployments/helm/emcoOpenNESS/rsync/values.yaml b/deployments/helm/emcoOpenNESS/rsync/values.yaml
new file mode 100644
index 0000000..de29c49
--- /dev/null
+++ b/deployments/helm/emcoOpenNESS/rsync/values.yaml
@@ -0,0 +1,73 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+#################################################################
+# Global configuration defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository:
+image: emco-rsync:latest
+pullPolicy: Always
+command: "./rsync"
+args: ""
+workingDir: /opt/emco/rsync
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: false
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: rsync
+ portName: rsync
+ internalPort: 9031
+ externalPort: 9031
+ nodePort: 41
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/monitor/Chart.yaml b/deployments/helm/monitor/Chart.yaml
new file mode 100644
index 0000000..084fc01
--- /dev/null
+++ b/deployments/helm/monitor/Chart.yaml
@@ -0,0 +1,25 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: v1
+name: monitor
+description: A Helm chart for monitor
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+appVersion: 1.16.0
diff --git a/deployments/helm/monitor/templates/clusterrole.yaml b/deployments/helm/monitor/templates/clusterrole.yaml
new file mode 100644
index 0000000..d43318d
--- /dev/null
+++ b/deployments/helm/monitor/templates/clusterrole.yaml
@@ -0,0 +1,80 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ creationTimestamp: null
+ name: monitor
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - endpoints
+ - persistentvolumeclaims
+ - events
+ - configmaps
+ - secrets
+ verbs:
+ - '*'
+- apiGroups:
+ - apps
+ resources:
+ - deployments
+ - daemonsets
+ - replicasets
+ - statefulsets
+ verbs:
+ - '*'
+- apiGroups:
+ - monitoring.coreos.com
+ resources:
+ - servicemonitors
+ verbs:
+ - get
+ - create
+- apiGroups:
+ - apps
+ resourceNames:
+ - monitor
+ resources:
+ - deployments/finalizers
+ verbs:
+ - update
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+- apiGroups:
+ - apps
+ resources:
+ - replicasets
+ verbs:
+ - get
+- apiGroups:
+ - k8splugin.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - batch
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - extensions
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - certificates.k8s.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
\ No newline at end of file
diff --git a/deployments/helm/monitor/templates/clusterrolebinding.yaml b/deployments/helm/monitor/templates/clusterrolebinding.yaml
new file mode 100644
index 0000000..70305e5
--- /dev/null
+++ b/deployments/helm/monitor/templates/clusterrolebinding.yaml
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: monitor
+subjects:
+- kind: ServiceAccount
+ name: monitor
+ namespace: default
+roleRef:
+ kind: ClusterRole
+ name: monitor
+ apiGroup: rbac.authorization.k8s.io
\ No newline at end of file
diff --git a/deployments/helm/monitor/templates/customresourcedefinition.yaml b/deployments/helm/monitor/templates/customresourcedefinition.yaml
new file mode 100644
index 0000000..b399eca
--- /dev/null
+++ b/deployments/helm/monitor/templates/customresourcedefinition.yaml
@@ -0,0 +1,104 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ name: resourcebundlestates.k8splugin.io
+spec:
+ group: k8splugin.io
+ names:
+ kind: ResourceBundleState
+ listKind: ResourceBundleStateList
+ plural: resourcebundlestates
+ singular: resourcebundlestate
+ scope: Namespaced
+ subresources:
+ status: {}
+ validation:
+ openAPIV3Schema:
+ 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:
+ properties:
+ selector:
+ type: object
+ required:
+ - selector
+ type: object
+ status:
+ properties:
+ podStatuses:
+ items:
+ type: object
+ type: array
+ ready:
+ type: boolean
+ resourceCount:
+ format: int32
+ type: integer
+ serviceStatuses:
+ items:
+ type: object
+ type: array
+ configMapStatuses:
+ items:
+ type: object
+ type: array
+ deploymentStatuses:
+ items:
+ type: object
+ type: array
+ secretStatuses:
+ items:
+ type: object
+ type: array
+ daemonSetStatuses:
+ items:
+ type: object
+ type: array
+ ingressStatuses:
+ items:
+ type: object
+ type: array
+ jobStatuses:
+ items:
+ type: object
+ type: array
+ statefulSetStatuses:
+ items:
+ type: object
+ type: array
+ csrStatuses:
+ items:
+ type: object
+ type: array
+ required:
+ - ready
+ - resourceCount
+ - podStatuses
+ - serviceStatuses
+ - configMapStatuses
+ - deploymentStatuses
+ - secretStatuses
+ - daemonSetStatuses
+ - ingressStatuses
+ - jobStatuses
+ - statefulSetStatuses
+ - csrStatuses
+ type: object
+ version: v1alpha1
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
\ No newline at end of file
diff --git a/deployments/helm/monitor/templates/deployment.yaml b/deployments/helm/monitor/templates/deployment.yaml
new file mode 100644
index 0000000..4460b91
--- /dev/null
+++ b/deployments/helm/monitor/templates/deployment.yaml
@@ -0,0 +1,46 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: monitor
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: monitor
+ template:
+ metadata:
+ labels:
+ app: monitor
+ spec:
+ serviceAccountName: monitor
+ containers:
+ - name: monitor
+ # Replace this with the built image name
+ #image: emcov2/monitor:latest
+ image: {{ .Values.registryPrefix }}emco-monitor:{{ .Values.tag }}
+ command:
+ - /opt/emco/monitor/monitor
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: NO_PROXY
+ value: {{ .Values.noProxyHosts }}
+ - name: no_proxy
+ value: {{ .Values.noProxyHosts }}
+ - name: http_proxy
+ value: {{ .Values.httpProxy }}
+ - name: https_proxy
+ value: {{ .Values.httpsProxy }}
+ - name: HTTP_PROXY
+ value: {{ .Values.httpProxy }}
+ - name: HTTPS_PROXY
+ value: {{ .Values.httpsProxy }}
+ - name: WATCH_NAMESPACE
+ value: ""
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: OPERATOR_NAME
+ value: "monitor"
\ No newline at end of file
diff --git a/deployments/helm/monitor/templates/role.yaml b/deployments/helm/monitor/templates/role.yaml
new file mode 100644
index 0000000..b477774
--- /dev/null
+++ b/deployments/helm/monitor/templates/role.yaml
@@ -0,0 +1,74 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ creationTimestamp: null
+ name: monitor
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - endpoints
+ - persistentvolumeclaims
+ - events
+ - configmaps
+ - secrets
+ verbs:
+ - '*'
+- apiGroups:
+ - apps
+ resources:
+ - deployments
+ - daemonsets
+ - replicasets
+ - statefulsets
+ verbs:
+ - '*'
+- apiGroups:
+ - monitoring.coreos.com
+ resources:
+ - servicemonitors
+ verbs:
+ - get
+ - create
+- apiGroups:
+ - apps
+ resourceNames:
+ - monitor
+ resources:
+ - deployments/finalizers
+ verbs:
+ - update
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+- apiGroups:
+ - apps
+ resources:
+ - replicasets
+ verbs:
+ - get
+- apiGroups:
+ - k8splugin.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - batch
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - extensions
+ resources:
+ - '*'
+ verbs:
+ - '*'
diff --git a/deployments/helm/monitor/templates/rolebinding.yaml b/deployments/helm/monitor/templates/rolebinding.yaml
new file mode 100644
index 0000000..9cb93a2
--- /dev/null
+++ b/deployments/helm/monitor/templates/rolebinding.yaml
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: monitor
+subjects:
+- kind: ServiceAccount
+ name: monitor
+roleRef:
+ kind: Role
+ name: monitor
+ apiGroup: rbac.authorization.k8s.io
\ No newline at end of file
diff --git a/deployments/helm/monitor/templates/serviceaccount.yaml b/deployments/helm/monitor/templates/serviceaccount.yaml
new file mode 100644
index 0000000..331cbf1
--- /dev/null
+++ b/deployments/helm/monitor/templates/serviceaccount.yaml
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: monitor
\ No newline at end of file
diff --git a/deployments/helm/monitor/values.yaml b/deployments/helm/monitor/values.yaml
new file mode 100644
index 0000000..1b0ba94
--- /dev/null
+++ b/deployments/helm/monitor/values.yaml
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+registryPrefix: ${EMCODOCKERREPO}
+tag:
+noProxyHosts: ${NO_PROXY}
+httpProxy: ""
+httpsProxy: ""
diff --git a/deployments/kubernetes/monitor-deploy.yaml b/deployments/kubernetes/monitor-deploy.yaml
new file mode 100644
index 0000000..a823508
--- /dev/null
+++ b/deployments/kubernetes/monitor-deploy.yaml
@@ -0,0 +1,327 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ name: resourcebundlestates.k8splugin.io
+spec:
+ group: k8splugin.io
+ names:
+ kind: ResourceBundleState
+ listKind: ResourceBundleStateList
+ plural: resourcebundlestates
+ singular: resourcebundlestate
+ scope: Namespaced
+ subresources:
+ status: {}
+ validation:
+ openAPIV3Schema:
+ 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:
+ properties:
+ selector:
+ type: object
+ required:
+ - selector
+ type: object
+ status:
+ properties:
+ podStatuses:
+ items:
+ type: object
+ type: array
+ ready:
+ type: boolean
+ resourceCount:
+ format: int32
+ type: integer
+ serviceStatuses:
+ items:
+ type: object
+ type: array
+ configMapStatuses:
+ items:
+ type: object
+ type: array
+ deploymentStatuses:
+ items:
+ type: object
+ type: array
+ secretStatuses:
+ items:
+ type: object
+ type: array
+ daemonSetStatuses:
+ items:
+ type: object
+ type: array
+ ingressStatuses:
+ items:
+ type: object
+ type: array
+ jobStatuses:
+ items:
+ type: object
+ type: array
+ statefulSetStatuses:
+ items:
+ type: object
+ type: array
+ csrStatuses:
+ items:
+ type: object
+ type: array
+ required:
+ - ready
+ - resourceCount
+ - podStatuses
+ - serviceStatuses
+ - configMapStatuses
+ - deploymentStatuses
+ - secretStatuses
+ - daemonSetStatuses
+ - ingressStatuses
+ - jobStatuses
+ - statefulSetStatuses
+ - csrStatuses
+ type: object
+ version: v1alpha1
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ creationTimestamp: null
+ name: monitor
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - endpoints
+ - persistentvolumeclaims
+ - events
+ - configmaps
+ - secrets
+ verbs:
+ - '*'
+- apiGroups:
+ - apps
+ resources:
+ - deployments
+ - daemonsets
+ - replicasets
+ - statefulsets
+ verbs:
+ - '*'
+- apiGroups:
+ - monitoring.coreos.com
+ resources:
+ - servicemonitors
+ verbs:
+ - get
+ - create
+- apiGroups:
+ - apps
+ resourceNames:
+ - monitor
+ resources:
+ - deployments/finalizers
+ verbs:
+ - update
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+- apiGroups:
+ - apps
+ resources:
+ - replicasets
+ verbs:
+ - get
+- apiGroups:
+ - k8splugin.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - batch
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - extensions
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - certificates.k8s.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
+
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ creationTimestamp: null
+ name: monitor
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - endpoints
+ - persistentvolumeclaims
+ - events
+ - configmaps
+ - secrets
+ verbs:
+ - '*'
+- apiGroups:
+ - apps
+ resources:
+ - deployments
+ - daemonsets
+ - replicasets
+ - statefulsets
+ verbs:
+ - '*'
+- apiGroups:
+ - monitoring.coreos.com
+ resources:
+ - servicemonitors
+ verbs:
+ - get
+ - create
+- apiGroups:
+ - apps
+ resourceNames:
+ - monitor
+ resources:
+ - deployments/finalizers
+ verbs:
+ - update
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+- apiGroups:
+ - apps
+ resources:
+ - replicasets
+ verbs:
+ - get
+- apiGroups:
+ - k8splugin.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - batch
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - extensions
+ resources:
+ - '*'
+ verbs:
+ - '*'
+
+---
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: monitor
+subjects:
+- kind: ServiceAccount
+ name: monitor
+roleRef:
+ kind: Role
+ name: monitor
+ apiGroup: rbac.authorization.k8s.io
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: monitor
+subjects:
+- kind: ServiceAccount
+ name: monitor
+ namespace: default
+roleRef:
+ kind: ClusterRole
+ name: monitor
+ apiGroup: rbac.authorization.k8s.io
+
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: monitor
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: monitor
+ labels:
+ "emco/deployment-id": "monitor"
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ "emco/deployment-id": "monitor"
+ template:
+ metadata:
+ labels:
+ "emco/deployment-id": "monitor"
+ spec:
+ serviceAccountName: monitor
+ containers:
+ - name: monitor
+ # Replace this with the built image name
+ image: emcov2/monitor:latest
+ command:
+ - /opt/monitor/monitor
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: WATCH_NAMESPACE
+ value: ""
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: OPERATOR_NAME
+ value: "monitor"
+
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..43ca5b6
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,3 @@
+/.tox
+/_build/*
+/__pycache__/*
diff --git a/docs/EMCO.postman_collection.json b/docs/EMCO.postman_collection.json
new file mode 100644
index 0000000..aebd0eb
--- /dev/null
+++ b/docs/EMCO.postman_collection.json
@@ -0,0 +1,15748 @@
+{
+ "info": {
+ "_postman_id": "902ab7b7-5f6d-4a19-ad18-5e1004bd71a0",
+ "name": "EMCO",
+ "description": "EMCO - Edge Multi Cluster Orchestrator\n# Introduction\nApplication Orchestration - For applications and services delivered across multiple administrative infrastructures\n",
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
+ },
+ "item": [
+ {
+ "name": "projects",
+ "item": [
+ {
+ "name": "{project-name}",
+ "item": [
+ {
+ "name": "composite-apps",
+ "item": [
+ {
+ "name": "{composite-app-name}/{composite-app-version}",
+ "item": [
+ {
+ "name": "apps",
+ "item": [
+ {
+ "name": "{app-name}",
+ "item": [
+ {
+ "name": "Get Application",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "app-name",
+ "value": "",
+ "description": "(Required) Name of the Application"
+ }
+ ]
+ },
+ "description": "Get `application`\n"
+ },
+ "response": [
+ {
+ "name": "Application not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ }
+ ]
+ },
+ {
+ "name": "Update app in Composite Application",
+ "request": {
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "multipart/form-data"
+ }
+ ],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"\",\"description\":\"\",\"userData1\":\"\",\"userData2\":\"\"}",
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "app-name",
+ "value": "",
+ "description": "(Required) Name of the Application"
+ }
+ ]
+ },
+ "description": "Update app in `Composite Application`"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Application not found",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Delete Application",
+ "request": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "app-name",
+ "value": "",
+ "description": "(Required) Name of the Application"
+ }
+ ]
+ },
+ "description": "Delete `application`\n"
+ },
+ "response": [
+ {
+ "name": "Deleted",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "No Content",
+ "code": 204,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Application not found",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps/:app-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps",
+ ":app-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "app-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Add app to Composite Application",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "multipart/form-data"
+ }
+ ],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"\",\"description\":\"\",\"userData1\":\"\",\"userData2\":\"\"}",
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ }
+ ]
+ },
+ "description": "Add a new `app to composite application`"
+ },
+ "response": [
+ {
+ "name": "Invalid Input",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Method Not Allowed",
+ "code": 405,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "metadata",
+ "value": "{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Created",
+ "code": 201,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ }
+ ]
+ },
+ {
+ "name": "Get all apps in Composite Application",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ }
+ ]
+ },
+ "description": "Get all `apps in composite application`\n"
+ },
+ "response": [
+ {
+ "name": "No Apps found in Composite Application",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/apps",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "apps"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "[\n {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n },\n {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n }\n]"
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "composite-profiles",
+ "item": [
+ {
+ "name": "{composite-profile-name}",
+ "item": [
+ {
+ "name": "profiles",
+ "item": [
+ {
+ "name": "{profile-name}",
+ "item": [
+ {
+ "name": "Get profile from Composite Profile",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ },
+ {
+ "key": "profile-name",
+ "value": "",
+ "description": "(Required) Name of the Profile"
+ }
+ ]
+ },
+ "description": "Get `profile from composite profile`\n"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"app-name\": \"Application1\"\n }\n}"
+ },
+ {
+ "name": "Profile not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Update Composite Profile for an app",
+ "request": {
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "multipart/form-data"
+ }
+ ],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"\",\"description\":\"\",\"userData1\":\"\",\"userData2\":\"\"},\"app-name\":\"\"}}",
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ },
+ {
+ "key": "profile-name",
+ "value": "",
+ "description": "(Required) Name of the Profile"
+ }
+ ]
+ },
+ "description": "Update `Profile`"
+ },
+ "response": [
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"},\"app-name\":\"Application1\"}}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Profile not found",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"},\"app-name\":\"Application1\"}}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"},\"app-name\":\"Application1\"}}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"app-name\": \"Application1\"\n }\n}"
+ }
+ ]
+ },
+ {
+ "name": "Delete Profile",
+ "request": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ },
+ {
+ "key": "profile-name",
+ "value": "",
+ "description": "(Required) Name of the Profile"
+ }
+ ]
+ },
+ "description": "Delete `profile in Composite Profile`\n"
+ },
+ "response": [
+ {
+ "name": "Profile not found",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Deleted",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "No Content",
+ "code": 204,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/:profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ":profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ },
+ {
+ "key": "profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Add app profile to Composite Profile",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "multipart/form-data"
+ }
+ ],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"\",\"description\":\"\",\"userData1\":\"\",\"userData2\":\"\"},\"app-name\":\"\"}}",
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ }
+ ]
+ },
+ "description": "Add a `profile for application`"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"},\"app-name\":\"Application1\"}}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Created",
+ "code": 201,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"app-name\": \"Application1\"\n }\n}"
+ },
+ {
+ "name": "Invalid Input",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "file",
+ "value": "",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ },
+ {
+ "key": "metadata",
+ "value": "{\"spec\":{\"metadata\":{\"name\":\"ResName\",\"description\":\"Resource description\",\"userData1\":\"Some data\",\"userData2\":\"Some more data\"},\"app-name\":\"Application1\"}}",
+ "description": {
+ "content": "",
+ "type": "text/plain"
+ },
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Method Not Allowed",
+ "code": 405,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Get all app profiles in Composite Profiles",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ }
+ ]
+ },
+ "description": "Get all `app profiles in a composite Profile`\n"
+ },
+ "response": [
+ {
+ "name": "No profile found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "[\n {\n \"spec\": {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"app-name\": \"Application1\"\n }\n },\n {\n \"spec\": {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"app-name\": \"Application1\"\n }\n }\n]"
+ }
+ ]
+ },
+ {
+ "name": "Query profile for an application",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/?app-name=",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ""
+ ],
+ "query": [
+ {
+ "key": "app-name",
+ "value": "",
+ "description": "(Required) "
+ }
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ }
+ ]
+ },
+ "description": "Query `profile for an application`\n"
+ },
+ "response": [
+ {
+ "name": "Profile for application not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/?app-name=",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ""
+ ],
+ "query": [
+ {
+ "key": "app-name",
+ "value": ""
+ }
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name/profiles/?app-name=",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name",
+ "profiles",
+ ""
+ ],
+ "query": [
+ {
+ "key": "app-name",
+ "value": ""
+ }
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"app-name\": \"Application1\"\n }\n}"
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Get Composite Profile",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ }
+ ]
+ },
+ "description": "Get `composite profile`\n"
+ },
+ "response": [
+ {
+ "name": "Composite Profile not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ }
+ ]
+ },
+ {
+ "name": "Update Composite Profile",
+ "request": {
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"\",\n \"description\": \"\",\n \"userData1\": \"\",\n \"userData2\": \"\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ }
+ ]
+ },
+ "description": "Update `Composite Profile`"
+ },
+ "response": [
+ {
+ "name": "Composite Profile not found",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Delete Composite Profile",
+ "request": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "composite-profile-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Profile"
+ }
+ ]
+ },
+ "description": "Delete `Composite Profile`\n"
+ },
+ "response": [
+ {
+ "name": "Deleted",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "No Content",
+ "code": 204,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Composite Profile not found",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles/:composite-profile-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles",
+ ":composite-profile-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "composite-profile-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Add Composite Profile",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"\",\n \"description\": \"\",\n \"userData1\": \"\",\n \"userData2\": \"\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ }
+ ]
+ },
+ "description": "Add a new `composite profile`"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Created",
+ "code": 201,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ {
+ "name": "Invalid Input",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Method Not Allowed",
+ "code": 405,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Get all Composite Profiles",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ }
+ ]
+ },
+ "description": "Get all `profiles in a composite application`\n"
+ },
+ "response": [
+ {
+ "name": "No composite profile found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/composite-profiles",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "composite-profiles"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "[\n {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n },\n {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n }\n]"
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "generic-placement-intents",
+ "item": [
+ {
+ "name": "{generic-placement-intent-name}",
+ "item": [
+ {
+ "name": "app-intents",
+ "item": [
+ {
+ "name": "{intent-name}",
+ "item": [
+ {
+ "name": "Get intent",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ },
+ {
+ "key": "intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent for application"
+ }
+ ]
+ },
+ "description": "Get `generic placement intent`\n"
+ },
+ "response": [
+ {
+ "name": "Intent not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ }
+ ]
+ },
+ {
+ "name": "Update intent for an application",
+ "request": {
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"\",\n \"description\": \"\",\n \"userData1\": \"\",\n \"userData2\": \"\"\n },\n \"spec\": {\n \"app-name\": \"\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ],\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ],\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ },
+ {
+ "key": "intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent for application"
+ }
+ ]
+ },
+ "description": "Update `generic placement intent for application`"
+ },
+ "response": [
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ {
+ "name": "Generic placement intent not found",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Delete intent",
+ "request": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ },
+ {
+ "key": "intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent for application"
+ }
+ ]
+ },
+ "description": "Delete `generic placement intent`\n"
+ },
+ "response": [
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Deleted",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "No Content",
+ "code": 204,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Intent not found",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Add intent for an application",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"\",\n \"description\": \"\",\n \"userData1\": \"\",\n \"userData2\": \"\"\n },\n \"spec\": {\n \"app-name\": \"\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ],\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ],\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n },\n {\n \"cluster-label-name\": \"\",\n \"cluster-name\": \"\",\n \"provider-name\": \"\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ }
+ ]
+ },
+ "description": "Add a `intent for application`"
+ },
+ "response": [
+ {
+ "name": "Invalid Input",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Method Not Allowed",
+ "code": 405,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Created",
+ "code": 201,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ }
+ ]
+ },
+ {
+ "name": "Get all Intents in Generic Placement",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ }
+ ]
+ },
+ "description": "Get all ` Intents in Generic Placement Intent`\n"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "[\n {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n },\n {\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n }\n]"
+ },
+ {
+ "name": "No Generic Placement Intent found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Query intent for an application",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/?app-name=",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ""
+ ],
+ "query": [
+ {
+ "key": "app-name",
+ "value": "",
+ "description": "(Required) "
+ }
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ }
+ ]
+ },
+ "description": "Query `generic placement intent for application`\n"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/?app-name=",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ""
+ ],
+ "query": [
+ {
+ "key": "app-name",
+ "value": ""
+ }
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"app-name\": \"appl\",\n \"allOf\": [\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n },\n {\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ],\n \"cluster-label-name\": \"west\",\n \"cluster-name\": \"cluster2\",\n \"provider-name\": \"provider2\"\n }\n ],\n \"anyOf\": [\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n },\n {\n \"cluster-label-name\": \"east\",\n \"cluster-name\": \"cluster1\",\n \"provider-name\": \"provider1\"\n }\n ]\n }\n}"
+ },
+ {
+ "name": "Generic Placement Intent for application not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name/app-intents/?app-name=",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name",
+ "app-intents",
+ ""
+ ],
+ "query": [
+ {
+ "key": "app-name",
+ "value": ""
+ }
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Get Generic Placement Intent",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ }
+ ]
+ },
+ "description": "Get `generic placement intent`\n"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ {
+ "name": "Generic Placement Intent not found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Update Generic Placement Intent",
+ "request": {
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"\"\n },\n \"metadata\": {\n \"name\": \"\",\n \"description\": \"\",\n \"userData1\": \"\",\n \"userData2\": \"\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ }
+ ]
+ },
+ "description": "Update `Generic Placement Intent`"
+ },
+ "response": [
+ {
+ "name": "Generic Placement Intent not found",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "PUT",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Delete Generic Placement Intent",
+ "request": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "generic-placement-intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent"
+ }
+ ]
+ },
+ "description": "Delete `Generic Placement Intent`\n"
+ },
+ "response": [
+ {
+ "name": "Deleted",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "No Content",
+ "code": 204,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Invalid data",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Bad Request",
+ "code": 400,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ },
+ {
+ "name": "Generic Placement Intent not found",
+ "originalRequest": {
+ "method": "DELETE",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents/:generic-placement-intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents",
+ ":generic-placement-intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "generic-placement-intent-name"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "Add Generic Placement Intent",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"\"\n },\n \"metadata\": {\n \"name\": \"\",\n \"description\": \"\",\n \"userData1\": \"\",\n \"userData2\": \"\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ }
+ ]
+ },
+ "description": "Add a new `generic placement intent`"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Created",
+ "code": 201,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ {
+ "name": "Invalid Input",
+ "originalRequest": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Method Not Allowed",
+ "code": 405,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ },
+ {
+ "name": "Get all Generic Placement Intents",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ }
+ ]
+ },
+ "description": "Get all `Generic Placement Intents`\n"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "[\n {\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n },\n {\n \"spec\": {\n \"logical-cloud\": \"cloud1\"\n },\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n }\n }\n]"
+ },
+ {
+ "name": "No Generic Placement Intent found",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/generic-placement-intents",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "generic-placement-intents"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ }
+ ]
+ }
+ },
+ "status": "Not Found",
+ "code": 404,
+ "_postman_previewlanguage": "text",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "text/plain"
+ }
+ ],
+ "cookie": [],
+ "body": ""
+ }
+ ]
+ }
+ ],
+ "protocolProfileBehavior": {},
+ "_postman_isSubFolder": true
+ },
+ {
+ "name": "deployment-intent-groups",
+ "item": [
+ {
+ "name": "{deployment-intent-group-name}",
+ "item": [
+ {
+ "name": "intents",
+ "item": [
+ {
+ "name": "{intent-name}",
+ "item": [
+ {
+ "name": "Get intent for an application",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/deployment-intent-groups/:deployment-intent-group-name/intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "deployment-intent-groups",
+ ":deployment-intent-group-name",
+ "intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name",
+ "value": "",
+ "description": "(Required) Name of the project"
+ },
+ {
+ "key": "composite-app-name",
+ "value": "",
+ "description": "(Required) Name of the Composite Application"
+ },
+ {
+ "key": "composite-app-version",
+ "value": "",
+ "description": "(Required) Version of the Composite Application"
+ },
+ {
+ "key": "deployment-intent-group-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent for application"
+ },
+ {
+ "key": "intent-name",
+ "value": "",
+ "description": "(Required) Name of Generic Placement Intent for application"
+ }
+ ]
+ },
+ "description": "Get `Deployment Intent`\n"
+ },
+ "response": [
+ {
+ "name": "Success",
+ "originalRequest": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{baseUrl}}/projects/:project-name/composite-apps/:composite-app-name/:composite-app-version/deployment-intent-groups/:deployment-intent-group-name/intents/:intent-name",
+ "host": [
+ "{{baseUrl}}"
+ ],
+ "path": [
+ "projects",
+ ":project-name",
+ "composite-apps",
+ ":composite-app-name",
+ ":composite-app-version",
+ "deployment-intent-groups",
+ ":deployment-intent-group-name",
+ "intents",
+ ":intent-name"
+ ],
+ "variable": [
+ {
+ "key": "project-name"
+ },
+ {
+ "key": "composite-app-name"
+ },
+ {
+ "key": "composite-app-version"
+ },
+ {
+ "key": "deployment-intent-group-name"
+ },
+ {
+ "key": "intent-name"
+ }
+ ]
+ }
+ },
+ "status": "OK",
+ "code": 200,
+ "_postman_previewlanguage": "json",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "cookie": [],
+ "body": "{\n \"metadata\": {\n \"name\": \"ResName\",\n \"description\": \"Resource description\",\n \"userData1\": \"Some data\",\n \"userData2\": \"Some more data\"\n },\n \"spec\": {\n \"intent\": \"