main 25ef9a02ada3 cached
197 files
734.7 KB
193.5k tokens
1 requests
Download .txt
Showing preview only (788K chars total). Download the full file or copy to clipboard to get everything.
Repository: oracle-terraform-modules/terraform-oci-oke
Branch: main
Commit: 25ef9a02ada3
Files: 197
Total size: 734.7 KB

Directory structure:
gitextract_s2i9ymxq/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug_Report.md
│   │   ├── Feature_Request.md
│   │   └── Question.md
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── THIRD_PARTY_LICENSES.txt
├── data-common.tf
├── data-images.tf
├── docs/
│   ├── diagrams.md
│   ├── prerequisites.md
│   ├── quickstart.md
│   └── terraformoptions.md
├── examples/
│   ├── bastion/
│   │   └── README.md
│   ├── cluster/
│   │   └── README.md
│   ├── cluster-addons/
│   │   └── README.md
│   ├── extensions/
│   │   └── README.md
│   ├── iam/
│   │   └── README.md
│   ├── istio-mc/
│   │   ├── README.md
│   │   ├── c1.tf
│   │   ├── c2.tf
│   │   ├── contexts.tf
│   │   ├── istio.tf
│   │   ├── locals.tf
│   │   ├── outputs.tf
│   │   ├── providers.tf
│   │   ├── resources/
│   │   │   └── istio.template.yaml
│   │   ├── scripts/
│   │   │   ├── cloud-init.sh
│   │   │   ├── generate_kubeconfig.template.sh
│   │   │   ├── istioctl.template.sh
│   │   │   ├── kubeconfig_set_credentials.template.sh
│   │   │   ├── set_alias.template.sh
│   │   │   └── token_helper.template.sh
│   │   ├── templates.tf
│   │   ├── terraform.tfvars.example
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── network/
│   │   ├── README.md
│   │   └── vars-network-drg-create.auto.tfvars.example
│   ├── operator/
│   │   └── README.md
│   ├── profiles/
│   │   ├── README.md
│   │   ├── cluster-workers-only/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── network-cluster-workers/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── network-only/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   └── workers-only/
│   │       ├── main.tf
│   │       ├── variables.tf
│   │       └── versions.tf
│   ├── provider-basic.tf
│   ├── rms/
│   │   ├── README.md
│   │   ├── oke-cluster-only/
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── output.tf
│   │   │   ├── schema.yaml
│   │   │   ├── variables-cluster.tf
│   │   │   ├── variables-extensions.tf
│   │   │   ├── variables-iam.tf
│   │   │   ├── variables-network.tf
│   │   │   ├── variables-operator.tf
│   │   │   └── versions.tf
│   │   ├── oke-network-only/
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── output.tf
│   │   │   ├── schema.yaml
│   │   │   ├── variables-bastion.tf
│   │   │   ├── variables-iam.tf
│   │   │   ├── variables-network.tf
│   │   │   ├── variables-subnets.tf
│   │   │   └── versions.tf
│   │   └── oke-workers-only/
│   │       ├── data.tf
│   │       ├── main.tf
│   │       ├── output.tf
│   │       ├── schema.yaml
│   │       ├── variables.tf
│   │       └── versions.tf
│   ├── utilities/
│   │   └── README.md
│   └── workers/
│       └── README.md
├── migration.tf
├── module-bastion.tf
├── module-cluster-addons.tf
├── module-cluster.tf
├── module-extensions.tf
├── module-iam.tf
├── module-network.tf
├── module-operator.tf
├── module-utilities.tf
├── module-workers.tf
├── modules/
│   ├── bastion/
│   │   ├── README.md
│   │   ├── cloudinit.tf
│   │   ├── compute.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── cluster/
│   │   ├── README.md
│   │   ├── cluster.tf
│   │   ├── outputs.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── cluster-addons/
│   │   ├── README.md
│   │   ├── addons.tf
│   │   ├── delete_addons.tf
│   │   ├── outputs.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── extensions/
│   │   ├── README.md
│   │   ├── argocd.tf
│   │   ├── autoscaler.tf
│   │   ├── cilium.tf
│   │   ├── dcgm_exporter.tf
│   │   ├── gatekeeper.tf
│   │   ├── locals.tf
│   │   ├── metricserver.tf
│   │   ├── mpi_operator.tf
│   │   ├── multus.tf
│   │   ├── prometheus.tf
│   │   ├── rdma_cni_plugin.tf
│   │   ├── service_account.tf
│   │   ├── sriov_cni_plugin.tf
│   │   ├── sriov_device_plugin.tf
│   │   ├── variables.tf
│   │   ├── versions.tf
│   │   └── whereabouts.tf
│   ├── iam/
│   │   ├── README.md
│   │   ├── await.tf
│   │   ├── group-autoscaling.tf
│   │   ├── group-cluster.tf
│   │   ├── group-operator.tf
│   │   ├── group-workers.tf
│   │   ├── outputs.tf
│   │   ├── policy.tf
│   │   ├── tagging.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── network/
│   │   ├── README.md
│   │   ├── datasources.tf
│   │   ├── drgs.tf
│   │   ├── locals.tf
│   │   ├── nsg-bastion.tf
│   │   ├── nsg-controlplane.tf
│   │   ├── nsg-fss.tf
│   │   ├── nsg-loadbalancers-int.tf
│   │   ├── nsg-loadbalancers-pub.tf
│   │   ├── nsg-operator.tf
│   │   ├── nsg-pods.tf
│   │   ├── nsg-workers.tf
│   │   ├── rules.tf
│   │   ├── subnets.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── operator/
│   │   ├── README.md
│   │   ├── cloudinit.tf
│   │   ├── compute.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── utilities/
│   │   ├── README.md
│   │   ├── drain.tf
│   │   ├── nodeready.tf
│   │   ├── ocir.tf
│   │   ├── resources/
│   │   │   └── await_node_readiness.tpl.sh
│   │   ├── variables.tf
│   │   └── versions.tf
│   └── workers/
│       ├── README.md
│       ├── cloudinit-oke.sh
│       ├── cloudinit-ubuntu.sh.tftpl
│       ├── cloudinit.tf
│       ├── clusternetworks.tf
│       ├── computecluster.tf
│       ├── data-faultdomains.tf
│       ├── data-shapes.tf
│       ├── gpumemorycluster.tf
│       ├── instance.tf
│       ├── instanceconfig.tf
│       ├── instancepools.tf
│       ├── locals.tf
│       ├── nodepools.tf
│       ├── outputs.tf
│       ├── variables.tf
│       ├── versions.tf
│       └── virtualnodepools.tf
├── variables-bastion.tf
├── variables-cluster-addons.tf
├── variables-cluster.tf
├── variables-common.tf
├── variables-extensions.tf
├── variables-iam.tf
├── variables-network.tf
├── variables-operator.tf
├── variables-utilities.tf
├── variables-workers.tf
└── versions.tf

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/Bug_Report.md
================================================
---
name: 🐛 Bug Report
about: If something isn't working as expected 🤔.
labels: bug
---

<!---
Please note the following potential times when an issue might be in Terraform core:

* [Configuration Language](https://www.terraform.io/docs/configuration/index.html) or resource ordering issues
* [State](https://www.terraform.io/docs/state/index.html) and [State Backend](https://www.terraform.io/docs/backends/index.html) issues
* [Provisioner](https://www.terraform.io/docs/provisioners/index.html) issues
* [Registry](https://registry.terraform.io/) issues
* Spans resources across multiple providers

If you are running into one of these scenarios, we recommend opening an issue in the [Terraform core repository](https://github.com/hashicorp/terraform/) instead.
--->

<!--- Please keep this note for the community --->

### Community Note

* Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request
* Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
* If you are interested in working on this issue or have submitted a pull request, please leave a comment

<!--- Thank you for keeping this note for the community --->

### Terraform Version and Provider Version

<!--- Please run `terraform -v` to show the Terraform core version and provider version(s). 
If you are using a local copy of the Terraform Oracle Cloud Infrastructure Provider, run the plugin directly to get the version: `<path-to-plugin>/terraform-provider-oci`
If you are not running the latest version of Terraform or the provider, please upgrade because your issue may have already been fixed. [Terraform documentation on provider versioning](https://www.terraform.io/docs/configuration/providers.html#provider-versions). --->

### Affected Resource(s)

<!--- Please list the affected resources and data sources. For example, "oci_core_vcn". --->


### Terraform Configuration Files

<!--- Information about code formatting: https://help.github.com/articles/basic-writing-and-formatting-syntax/#quoting-code --->

```hcl
# Copy-paste your Terraform configurations here - for large Terraform configs,
# please use a service like Dropbox and share a link to the ZIP file. 
# Please remove any sensitive information from configuration files before sharing them. 
```

### Debug Output

<!---
Please provide a link to a GitHub Gist containing the complete debug output. Please do NOT paste the debug output in the issue; just paste a link to the Gist.

To obtain the debug output, see the [Verbose logging for OCI Terraform Provider](https://www.terraform.io/docs/providers/oci/guides/troubleshooting.html#verbose-logging-for-oci-terraform-provider).

Github Gist: https://gist.github.com/
--->

### Panic Output

<!--- 
If Terraform produced a panic, please provide a link to a GitHub Gist containing the output of the `crash.log`. 

Github Gist: https://gist.github.com/
--->

### Expected Behavior

<!--- What should have happened? --->

### Actual Behavior

<!--- What actually happened? --->

### Steps to Reproduce

<!--- Please list the steps required to reproduce the issue. --->

1. `terraform apply`

### Important Factoids

<!--- Is there anything atypical about your environment that we should know? For example: Is the issue specific to a region? --->

### References

<!---
Information about referencing Github Issues: https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests

Are there any other GitHub issues (open or closed) or pull requests that should be linked here? Vendor documentation? For example:
--->

================================================
FILE: .github/ISSUE_TEMPLATE/Feature_Request.md
================================================
---
name: 🚀 Feature Request
about: I have a suggestion (and might want to implement myself 🙂)!
labels: enhancement
---

<!--- Please keep this note for the community --->

### Community Note

* Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request
* Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
* If you are interested in working on this issue or have submitted a pull request, please leave a comment

<!--- Thank you for keeping this note for the community --->

### Description

<!--- Please leave a helpful description of the feature request here. --->

### New or Affected Resource(s)

<!--- Please list any new or affected resources and data sources that are part of the request. For example: "oci_core_vcn" --->


### Potential Terraform Configuration

<!--- Information about code formatting: https://help.github.com/articles/basic-writing-and-formatting-syntax/#quoting-code --->

```hcl
# Copy-paste any Terraform configurations for how the requested feature may be used. 
```

### References

<!---
Information about referencing Github Issues: https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests

Are there any other GitHub issues (open or closed) or pull requests that should be linked here? Vendor blog posts or documentation? For example:

--->


================================================
FILE: .github/ISSUE_TEMPLATE/Question.md
================================================
---
name: 💬 Question
about: Questions regarding the Terraform Oracle Cloud Infrastructure OKE module
labels: question
---

This Github template is intended for questions regarding the Terraform **Oracle Cloud Infrastructure** OKE module.

If you have a support request or question related to core Terraform functionality or the OCI provider, please submit them to one of these resources:

* [Terraform OCI provider](https://github.com/terraform-providers/terraform-provider-oci)
* [Terraform community resources](https://www.terraform.io/docs/extend/community/index.html)
* [HashiCorp support](https://support.hashicorp.com) (Terraform Enterprise customers)

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!---
Thanks for filing an issue 😄 ! Before you submit, please read the following:

Check the other issue templates if you are trying to submit a bug report, feature request, or question
Search open/closed issues before submitting since someone might have asked the same thing before!
-->

================================================
FILE: .gitignore
================================================
#  Local .terraform directories
**/.terraform/*

provider.tf

# .tfstate files
*.tfstate
*.tfstate.*

# .tfvars files
*.tfvars

generated/**

# visual code
**/.vscode/*
**/.metals*

.terraform.lock.hcl

# Generated documentation
docs/book

.idea*
.oca*

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

Oracle welcomes contributions to this repository from anyone.

If you want to submit a pull request to fix a bug or enhance an existing feature, please first open an issue and link to that issue when you submit your pull request.

If you have any questions about a possible submission, feel free to open an issue too.

## Contributing to the terraform-oci-oke repository

Pull requests can be made under [The Oracle Contributor Agreement](https://oca.opensource.oracle.com/).

For pull requests to be accepted, the bottom of your commit message must have the following line using your name and e-mail address as it appears in the OCA Signatories list.

```
Signed-off-by: Your Name <you@example.org>
```

This can be automatically added to pull requests by committing with:

```
  git commit --signoff
```

Only pull requests from committers that can be verified as having
signed the OCA can be accepted.

### Pull request process

1. Fork this repository
1. Create a branch in your fork to implement the changes. We recommend using the issue number as part of your branch name, e.g. `1234-fixes`
1. Ensure that any documentation is updated with the changes that are required by your fix.
1. Ensure that any samples are updated if the base image has been changed.
1. Submit the pull request. *Do not leave the pull request blank*. Explain exactly what your changes are meant to do and provide simple steps on how to validate your changes. Ensure that you reference the issue you created as well. We will assign the pull request to 2-3 people for review before it is merged.


================================================
FILE: LICENSE
================================================
Copyright (c) 2019 Oracle and/or its affiliates. 

The Universal Permissive License (UPL), Version 1.0

Subject to the condition set forth below, permission is hereby granted to any
person obtaining a copy of this software, associated documentation and/or data
(collectively the "Software"), free of charge and under any and all copyright
rights in the Software, and any and all patent rights owned or freely
licensable by each licensor hereunder covering either (i) the unmodified
Software as contributed to or provided by such licensor, or (ii) the Larger
Works (as defined below), to deal in both

(a) the Software, and
(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
one is included with the Software (each a "Larger Work" to which the Software
is contributed by such licensors),

without restriction, including without limitation the rights to copy, create
derivative works of, display, perform, and distribute the Software and make,
use, sell, offer for sale, import, export, have made, and have sold the
Software and the Larger Work(s), and to sublicense the foregoing rights on
either these or other terms.

This license is subject to the following condition:
The above copyright notice and either this complete permission notice or at
a minimum a reference to the UPL must be included in all copies or
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: Makefile
================================================
PROJECT_NAME := "terraform-oci-oke"
SHELL = /usr/bin/env bash -o pipefail
.SHELLFLAGS = -ec

.PHONY: all
all: build

##@ General

.PHONY: help
help: ## Display this help.
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

.terraform:
	terraform init

##@ Usage

.PHONY: plan
plan: .terraform ## Run terraform plan
	terraform plan

.PHONY: apply
apply: .terraform ## Run terraform apply
	terraform apply

.PHONY: ssh
ssh: ## Print SSH command
	terraform output -json | jq -rcM '.output.value.ssh_to_operator'

.PHONY: clean
clean: ## Clear Terraform module cache
	rm -rf ./.terraform

##@ Hygiene

.PHONY: fmt
fmt: ## Run terraform fmt
	terraform fmt -recursive .

.PHONY: validate
validate: ## Run terraform validate
	terraform validate

.PHONY: tflint
tflint: ## Run tflint
	tflint --recursive .


================================================
FILE: README.md
================================================
# Terraform OKE for Oracle Cloud Infrastructure

[changelog]: https://github.com/oracle-terraform-modules/terraform-oci-oke/releases
[contributing]: https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/CONTRIBUTING.md
[license]: https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/LICENSE
[canonical_license]: https://oss.oracle.com/licenses/upl/

[oci]: https://cloud.oracle.com/cloud-infrastructure
[oci_documentation]: https://docs.oracle.com/iaas/Content/services.htm
[oke]: https://docs.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm

[docs]: https://github.com/oracle-terraform-modules/terraform-oci-oke/tree/main/docs
[prerequisites]: https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/prerequisites.md
[quickstart]: https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/quickstart.md
[diagrams]: https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/diagrams.md
[terraform_options]: https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/terraformoptions.md
[examples]: https://github.com/oracle-terraform-modules/terraform-oci-oke/tree/main/examples
[repo]: https://github.com/oracle-terraform-modules/terraform-oci-oke
[releases]: https://github.com/oracle-terraform-modules/terraform-oci-oke/releases
[terraform]: https://www.terraform.io
[terraform_oci]: https://registry.terraform.io/providers/oracle/oci/latest
[terraform_oci_examples]: https://github.com/oracle/terraform-provider-oci/tree/master/examples
[terraform_guides_examples]: https://github.com/hashicorp/terraform-guides/tree/master/infrastructure-as-code/terraform-0.12-examples

[terraform_oci_bastion]: https://github.com/oracle-terraform-modules/terraform-oci-bastion
[terraform_oci_operator]: https://github.com/oracle-terraform-modules/terraform-oci-operator
[terraform_oci_vcn]: https://github.com/oracle-terraform-modules/terraform-oci-vcn

The [Terraform OKE Module][repo] for [Oracle Cloud Infrastructure][oci] (OCI) provides a [Terraform][terraform] module that provisions an [OCI Kubernetes Engine (OKE)][oke] cluster with supporting infrastructure.

It creates the following resources:

* A Virtual Cloud Network (VCN) with public and private subnets, network security groups, and gateways (internet, NAT, service, DRG)
* An OKE cluster (basic or enhanced) with configurable CNI, Kubernetes version, and OIDC authentication
* Worker node pools in various modes: OKE-managed node pools, virtual node pools, self-managed instances, instance pools, cluster networks, and compute clusters
* A bastion host for SSH access into the VCN
* An operator host for cluster management with kubectl, Helm, and optional tools (k9s, istioctl, stern, k8sgpt)
* IAM dynamic groups, policies, and optional tag namespaces
* Kubernetes extensions deployed via Helm or YAML manifests

The module outputs the OKE cluster ID, endpoints, bastion and operator SSH commands, and network resource IDs. Detailed outputs such as kubeconfig are available when `output_detail = true`.

## Topology

The default deployment creates a VCN with the following subnets:

| Subnet | Purpose | Access |
|--------|---------|--------|
| bastion | Bastion host | Public |
| operator | Operator host | Private |
| cp | Kubernetes control plane | Private (or public) |
| workers | Worker nodes | Private |
| pods | Pod network (NPN CNI) | Private |
| int_lb | Internal load balancers | Private |
| pub_lb | Public load balancers | Public |

![Default Multi-AD topology](docs/images/defaultmad-large.svg)

## Worker Modes

The module supports multiple worker management modes:

| Mode | Description | Use Case |
|------|-------------|----------|
| `node-pool` | OKE-managed node pools | General purpose workloads |
| `virtual-node-pool` | OKE-managed virtual nodes | Serverless, burstable workloads |
| `instance` | Self-managed compute instances | Custom node configuration |
| `instance-pool` | Self-managed instance pools | Scalable self-managed nodes |
| `cluster-network` | Self-managed cluster networks | HPC/GPU with RDMA networking |
| `compute-cluster` | Shared compute clusters | Multi-nodepool HPC clusters |

## Extensions

The module can deploy the following Kubernetes extensions:

| Extension | Method | Purpose |
|-----------|--------|---------|
| Cilium | Helm | eBPF-based networking, security, and observability |
| Multus | Daemonset | Multi-network pod interfaces |
| SR-IOV Device Plugin | Daemonset | SR-IOV network device advertisement |
| SR-IOV CNI Plugin | Daemonset | SR-IOV network connections |
| RDMA CNI Plugin | Daemonset | RDMA network connections |
| Whereabouts | Daemonset | IP address management for Multus |
| Metrics Server | Helm | Kubernetes metrics API |
| Cluster Autoscaler | Helm | Automatic node pool scaling |
| Prometheus | Helm | Monitoring and alerting |
| DCGM Exporter | Helm | GPU metrics for NVIDIA GPUs |
| Gatekeeper | Helm | OPA policy enforcement |
| MPI Operator | Manifest | MPI/NCCL distributed training jobs |
| ArgoCD | Helm | GitOps continuous delivery |

## [Documentation][docs]

- [Prerequisites][prerequisites]
- [Quickstart][quickstart]
- [Diagrams][diagrams]
- [Terraform Options][terraform_options]
- [Examples][examples]

## Related Documentation

- [Oracle Cloud Infrastructure Documentation][oci_documentation]
- [Terraform OCI Provider Documentation][terraform_oci]
- [OCI Kubernetes Engine Documentation][oke]
- [Terraform OCI Bastion Module][terraform_oci_bastion]

## Acknowledgement

Code derived and adapted from [Terraform OCI Examples][terraform_oci_examples] and HashiCorp's [Terraform 0.12 examples][terraform_guides_examples].

## Contributing

Learn how to [contribute][contributing].

## License

Copyright (c) 2017, 2025 Oracle Corporation and/or its affiliates. Licensed under the [Universal Permissive License 1.0][license] as shown at [https://oss.oracle.com/licenses/upl][canonical_license].


================================================
FILE: THIRD_PARTY_LICENSES.txt
================================================
github.com/open-policy-agent/gatekeeper
-------- Copyrights
Copyright 2018-2020 The Gatekeeper Authors
Copyright 2018 The Kubernetes Authors.
Copyright (c) 2015 Paxton Hare
Copyright 2019 The Kubernetes Authors.
-------- Notices
Gatekeeper
Copyright 2018-2020 The Gatekeeper Authors

This product includes modified code from the following projects,
as denoted by notifications in the source code headers:

controller-runtime
https://sigs.k8s.io/controller-runtime
Copyright 2018 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0

-------- License
SPDX:Apache-2.0
                                 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.

----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/PuerkitoBio/purell
-------- Copyrights
Copyright (c) 2012, Martin Angers

-------- Dependencies Summary
github.com/PuerkitoBio/purell

-------- License used by Dependencies
Copyright (c) 2012, Martin Angers
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/evanphx/json-patch
-------- Copyrights
Copyright (c) 2014, Evan Phoenix

-------- Dependencies Summary
github.com/evanphx/json-patch

-------- License used by Dependencies
Copyright (c) 2014, Evan Phoenix
All rights reserved.

Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.
* Neither the name of the Evan Phoenix nor the names of its contributors 
  may be used to endorse or promote products derived from this software 
  without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/pkg/errors
-------- Copyrights
Copyright (c) 2015, Dave Cheney <dave@cheney.net>

-------- Dependencies Summary
github.com/pkg/errors

-------- License used by Dependencies
Copyright (c) 2015, Dave Cheney <dave@cheney.net>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/rcrowley/go-metrics
-------- Copyrights
Copyright 2012 Richard Crowley. All rights reserved.

-------- Dependencies Summary
github.com/rcrowley/go-metrics

-------- License used by Dependencies
Copyright 2012 Richard Crowley. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    1.  Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

    2.  Redistributions in binary form must reproduce the above
        copyright notice, this list of conditions and the following
        disclaimer in the documentation and/or other materials provided
        with the distribution.

THIS SOFTWARE IS PROVIDED BY RICHARD CROWLEY ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL RICHARD CROWLEY OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation
are those of the authors and should not be interpreted as representing
official policies, either expressed or implied, of Richard Crowley.


----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/hashicorp/golang-lru
-------- Copyrights

-------- Dependencies Summary
github.com/hashicorp/golang-lru

-------- License used by Dependencies
Mozilla Public License, version 2.0

1. Definitions

1.1. "Contributor"

     means each individual or legal entity that creates, contributes to the
     creation of, or owns Covered Software.

1.2. "Contributor Version"

     means the combination of the Contributions of others (if any) used by a
     Contributor and that particular Contributor's Contribution.

1.3. "Contribution"

     means Covered Software of a particular Contributor.

1.4. "Covered Software"

     means Source Code Form to which the initial Contributor has attached the
     notice in Exhibit A, the Executable Form of such Source Code Form, and
     Modifications of such Source Code Form, in each case including portions
     thereof.

1.5. "Incompatible With Secondary Licenses"
     means

     a. that the initial Contributor has attached the notice described in
        Exhibit B to the Covered Software; or

     b. that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the terms of
        a Secondary License.

1.6. "Executable Form"

     means any form of the work other than Source Code Form.

1.7. "Larger Work"

     means a work that combines Covered Software with other material, in a
     separate file or files, that is not Covered Software.

1.8. "License"

     means this document.

1.9. "Licensable"

     means having the right to grant, to the maximum extent possible, whether
     at the time of the initial grant or subsequently, any and all of the
     rights conveyed by this License.

1.10. "Modifications"

     means any of the following:

     a. any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered Software; or

     b. any new file in Source Code Form that contains any Covered Software.

1.11. "Patent Claims" of a Contributor

      means any patent claim(s), including without limitation, method,
      process, and apparatus claims, in any patent Licensable by such
      Contributor that would be infringed, but for the grant of the License,
      by the making, using, selling, offering for sale, having made, import,
      or transfer of either its Contributions or its Contributor Version.

1.12. "Secondary License"

      means either the GNU General Public License, Version 2.0, the GNU Lesser
      General Public License, Version 2.1, the GNU Affero General Public
      License, Version 3.0, or any later versions of those licenses.

1.13. "Source Code Form"

      means the form of the work preferred for making modifications.

1.14. "You" (or "Your")

      means an individual or a legal entity exercising rights under this
      License. For legal entities, "You" includes any entity that controls, is
      controlled by, or is under common control with You. For purposes of this
      definition, "control" means (a) the power, direct or indirect, to cause
      the direction or management of such entity, whether by contract or
      otherwise, or (b) ownership of more than fifty percent (50%) of the
      outstanding shares or beneficial ownership of such entity.


2. License Grants and Conditions

2.1. Grants

     Each Contributor hereby grants You a world-wide, royalty-free,
     non-exclusive license:

     a. under intellectual property rights (other than patent or trademark)
        Licensable by such Contributor to use, reproduce, make available,
        modify, display, perform, distribute, and otherwise exploit its
        Contributions, either on an unmodified basis, with Modifications, or
        as part of a Larger Work; and

     b. under Patent Claims of such Contributor to make, use, sell, offer for
        sale, have made, import, and otherwise transfer either its
        Contributions or its Contributor Version.

2.2. Effective Date

     The licenses granted in Section 2.1 with respect to any Contribution
     become effective for each Contribution on the date the Contributor first
     distributes such Contribution.

2.3. Limitations on Grant Scope

     The licenses granted in this Section 2 are the only rights granted under
     this License. No additional rights or licenses will be implied from the
     distribution or licensing of Covered Software under this License.
     Notwithstanding Section 2.1(b) above, no patent license is granted by a
     Contributor:

     a. for any code that a Contributor has removed from Covered Software; or

     b. for infringements caused by: (i) Your and any other third party's
        modifications of Covered Software, or (ii) the combination of its
        Contributions with other software (except as part of its Contributor
        Version); or

     c. under Patent Claims infringed by Covered Software in the absence of
        its Contributions.

     This License does not grant any rights in the trademarks, service marks,
     or logos of any Contributor (except as may be necessary to comply with
     the notice requirements in Section 3.4).

2.4. Subsequent Licenses

     No Contributor makes additional grants as a result of Your choice to
     distribute the Covered Software under a subsequent version of this
     License (see Section 10.2) or under the terms of a Secondary License (if
     permitted under the terms of Section 3.3).

2.5. Representation

     Each Contributor represents that the Contributor believes its
     Contributions are its original creation(s) or it has sufficient rights to
     grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

     This License is not intended to limit any rights You have under
     applicable copyright doctrines of fair use, fair dealing, or other
     equivalents.

2.7. Conditions

     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
     Section 2.1.


3. Responsibilities

3.1. Distribution of Source Form

     All distribution of Covered Software in Source Code Form, including any
     Modifications that You create or to which You contribute, must be under
     the terms of this License. You must inform recipients that the Source
     Code Form of the Covered Software is governed by the terms of this
     License, and how they can obtain a copy of this License. You may not
     attempt to alter or restrict the recipients' rights in the Source Code
     Form.

3.2. Distribution of Executable Form

     If You distribute Covered Software in Executable Form then:

     a. such Covered Software must also be made available in Source Code Form,
        as described in Section 3.1, and You must inform recipients of the
        Executable Form how they can obtain a copy of such Source Code Form by
        reasonable means in a timely manner, at a charge no more than the cost
        of distribution to the recipient; and

     b. You may distribute such Executable Form under the terms of this
        License, or sublicense it under different terms, provided that the
        license for the Executable Form does not attempt to limit or alter the
        recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

     You may create and distribute a Larger Work under terms of Your choice,
     provided that You also comply with the requirements of this License for
     the Covered Software. If the Larger Work is a combination of Covered
     Software with a work governed by one or more Secondary Licenses, and the
     Covered Software is not Incompatible With Secondary Licenses, this
     License permits You to additionally distribute such Covered Software
     under the terms of such Secondary License(s), so that the recipient of
     the Larger Work may, at their option, further distribute the Covered
     Software under the terms of either this License or such Secondary
     License(s).

3.4. Notices

     You may not remove or alter the substance of any license notices
     (including copyright notices, patent notices, disclaimers of warranty, or
     limitations of liability) contained within the Source Code Form of the
     Covered Software, except that You may alter any license notices to the
     extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

     You may choose to offer, and to charge a fee for, warranty, support,
     indemnity or liability obligations to one or more recipients of Covered
     Software. However, You may do so only on Your own behalf, and not on
     behalf of any Contributor. You must make it absolutely clear that any
     such warranty, support, indemnity, or liability obligation is offered by
     You alone, and You hereby agree to indemnify every Contributor for any
     liability incurred by such Contributor as a result of warranty, support,
     indemnity or liability terms You offer. You may include additional
     disclaimers of warranty and limitations of liability specific to any
     jurisdiction.

4. Inability to Comply Due to Statute or Regulation

   If it is impossible for You to comply with any of the terms of this License
   with respect to some or all of the Covered Software due to statute,
   judicial order, or regulation then You must: (a) comply with the terms of
   this License to the maximum extent possible; and (b) describe the
   limitations and the code they affect. Such description must be placed in a
   text file included with all distributions of the Covered Software under
   this License. Except to the extent prohibited by statute or regulation,
   such description must be sufficiently detailed for a recipient of ordinary
   skill to be able to understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You
     fail to comply with any of its terms. However, if You become compliant,
     then the rights granted under this License from a particular Contributor
     are reinstated (a) provisionally, unless and until such Contributor
     explicitly and finally terminates Your grants, and (b) on an ongoing
     basis, if such Contributor fails to notify You of the non-compliance by
     some reasonable means prior to 60 days after You have come back into
     compliance. Moreover, Your grants from a particular Contributor are
     reinstated on an ongoing basis if such Contributor notifies You of the
     non-compliance by some reasonable means, this is the first time You have
     received notice of non-compliance with this License from such
     Contributor, and You become compliant prior to 30 days after Your receipt
     of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
     infringement claim (excluding declaratory judgment actions,
     counter-claims, and cross-claims) alleging that a Contributor Version
     directly or indirectly infringes any patent, then the rights granted to
     You by any and all Contributors for the Covered Software under Section
     2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
     license agreements (excluding distributors and resellers) which have been
     validly granted by You or Your distributors under this License prior to
     termination shall survive termination.

6. Disclaimer of Warranty

   Covered Software is provided under this License on an "as is" basis,
   without warranty of any kind, either expressed, implied, or statutory,
   including, without limitation, warranties that the Covered Software is free
   of defects, merchantable, fit for a particular purpose or non-infringing.
   The entire risk as to the quality and performance of the Covered Software
   is with You. Should any Covered Software prove defective in any respect,
   You (not any Contributor) assume the cost of any necessary servicing,
   repair, or correction. This disclaimer of warranty constitutes an essential
   part of this License. No use of  any Covered Software is authorized under
   this License except under this disclaimer.

7. Limitation of Liability

   Under no circumstances and under no legal theory, whether tort (including
   negligence), contract, or otherwise, shall any Contributor, or anyone who
   distributes Covered Software as permitted above, be liable to You for any
   direct, indirect, special, incidental, or consequential damages of any
   character including, without limitation, damages for lost profits, loss of
   goodwill, work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses, even if such party shall have been
   informed of the possibility of such damages. This limitation of liability
   shall not apply to liability for death or personal injury resulting from
   such party's negligence to the extent applicable law prohibits such
   limitation. Some jurisdictions do not allow the exclusion or limitation of
   incidental or consequential damages, so this exclusion and limitation may
   not apply to You.

8. Litigation

   Any litigation relating to this License may be brought only in the courts
   of a jurisdiction where the defendant maintains its principal place of
   business and such litigation shall be governed by laws of that
   jurisdiction, without reference to its conflict-of-law provisions. Nothing
   in this Section shall prevent a party's ability to bring cross-claims or
   counter-claims.

9. Miscellaneous

   This License represents the complete agreement concerning the subject
   matter hereof. If any provision of this License is held to be
   unenforceable, such provision shall be reformed only to the extent
   necessary to make it enforceable. Any law or regulation which provides that
   the language of a contract shall be construed against the drafter shall not
   be used to construe this License against a Contributor.


10. Versions of the License

10.1. New Versions

      Mozilla Foundation is the license steward. Except as provided in Section
      10.3, no one other than the license steward has the right to modify or
      publish new versions of this License. Each version will be given a
      distinguishing version number.

10.2. Effect of New Versions

      You may distribute the Covered Software under the terms of the version
      of the License under which You originally received the Covered Software,
      or under the terms of any subsequent version published by the license
      steward.

10.3. Modified Versions

      If you create software not governed by this License, and you want to
      create a new license for such software, you may create and use a
      modified version of this License if you rename the license and remove
      any references to the name of the license steward (except to note that
      such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
      Licenses If You choose to distribute Source Code Form that is
      Incompatible With Secondary Licenses under the terms of this version of
      the License, the notice described in Exhibit B of this License must be
      attached.

Exhibit A - Source Code Form License Notice

      This Source Code Form is subject to the
      terms of the Mozilla Public License, v.
      2.0. If a copy of the MPL was not
      distributed with this file, You can
      obtain one at
      http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file,
then You may include the notice in a location (such as a LICENSE file in a
relevant directory) where a recipient would be likely to look for such a
notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice

      This Source Code Form is "Incompatible
      With Secondary Licenses", as defined by
      the Mozilla Public License, v. 2.0.


----------------------- Dependencies Grouped by License ------------
-------- Dependency
cloud.google.com/go
-------- Copyrights
Copyright 2020 Google LLC
Copyright 2019 Google LLC
Copyright 2016 Google LLC
Copyright (c) 1996-1998 John D. Polstra.  All rights reserved.
Copyright (c) 2001 David E. O'Brien
Portions Copyright 2018 Google LLC.
Copyright 2018 Google LLC
Copyright 2014 Google LLC
Copyright 2017 Google LLC
Copyright 2018 Google Inc. All Rights Reserved.
Copyright 2020, Google LLC
Copyright 2017, Google LLC

-------- Dependency
contrib.go.opencensus.io/exporter/prometheus
-------- Copyrights
Copyright 2017, OpenCensus Authors
Copyright 2018, OpenCensus Authors

-------- Dependency
github.com/OneOfOne/xxhash
-------- Copyrights
The C implementation is ([Copyright](https://github.com/Cyan4973/xxHash/blob/master/LICENSE) (c) 2012-2014, Yann Collet)

-------- Dependency
github.com/go-logr/logr
-------- Copyrights
Copyright 2020 The logr Authors.
Copyright 2019 The logr Authors.
Copyright 2021 The logr Authors.

-------- Dependency
github.com/go-logr/zapr
-------- Copyrights
Copyright 2019 The logr Authors.
Copyright 2018 Solly Ross

-------- Dependency
github.com/go-openapi/jsonpointer
-------- Copyrights
Copyright 2013 sigu-399 ( https://github.com/sigu-399 )

-------- Dependency
github.com/go-openapi/jsonreference
-------- Copyrights
Copyright 2013 sigu-399 ( https://github.com/sigu-399 )

-------- Dependency
github.com/go-openapi/spec
-------- Copyrights
Copyright 2015 go-swagger maintainers
Copyright 2017 go-swagger maintainers

-------- Dependency
github.com/go-openapi/swag
-------- Copyrights
Copyright 2015 go-swagger maintainers

-------- Dependency
github.com/golang/glog
-------- Copyrights
Copyright 2013 Google Inc. All Rights Reserved.

-------- Dependency
github.com/golang/groupcache
-------- Copyrights
Copyright 2012 Google Inc.
Copyright 2013 Google Inc.

-------- Dependency
github.com/google/gofuzz
-------- Copyrights
Copyright 2014 Google Inc. All rights reserved.

-------- Dependency
github.com/googleapis/gnostic
-------- Copyrights
Copyright 2017-2020, Google LLC.
Copyright 2019 Google LLC. All Rights Reserved.
Copyright 2020 Google LLC. All Rights Reserved.
Copyright 2017 Google LLC. All Rights Reserved.
Copyright 2018 Google LLC. All Rights Reserved.
Copyright 2020 Google LLC. All Rights Reserved.\n" +

-------- Dependency
github.com/matttproud/golang_protobuf_extensions
-------- Copyrights
Copyright 2012 Matt T. Proud (matt.proud@gmail.com)
Copyright 2013 Matt T. Proud
Copyright 2016 Matt T. Proud
-------- Notices
Copyright 2012 Matt T. Proud (matt.proud@gmail.com)


-------- Dependency
github.com/modern-go/concurrent
-------- Copyrights

-------- Dependency
github.com/modern-go/reflect2
-------- Copyrights

-------- Dependency
github.com/open-policy-agent/cert-controller
-------- Copyrights
Copyright 2018-2020 The Gatekeeper Authors
-------- Notices
cert-controller
Copyright 2018-2020 The Gatekeeper Authors



-------- Dependency
github.com/open-policy-agent/frameworks/constraint
-------- Copyrights
Copyright 2017 The OPA Authors.  All rights reserved.
Copyright 2018 The OPA Authors.  All rights reserved.

-------- Dependency
github.com/open-policy-agent/opa
-------- Copyrights
Copyright 2016 The OPA Authors.  All rights reserved.
Copyright 2017 The OPA Authors.  All rights reserved.
Copyright 2020 The OPA Authors.  All rights reserved.
Copyright 2019 The OPA Authors.  All rights reserved.
Copyright 2018 The OPA Authors.  All rights reserved.
Copyright 2021 The OPA Authors.  All rights reserved.
Copyright (c) 2019 Jeremy Thomas
Code copyright 2019 Jeremy Thomas. Code released under [the MIT license](https://github.com/jgthms/bulma/blob/master/LICENSE).
Copyright 2017-2020 Authors of Cilium
_, err := out.Write([]byte(`// Copyright 2018 The OPA Authors.  All rights reserved.
Copyright 2015 xeipuuv
Copyright 2018 johandorland ( https://github.com/johandorland )
Copyright 2015 xeipuuv ( https://github.com/xeipuuv )
Copyright 2013 MongoDB, Inc.
Copyright 2017 johandorland ( https://github.com/johandorland )
Copyright (c) 2015 lestrrat
Copyright 2011 The Go Authors. All rights reserved.
Copyright 2013-2015 CoreOS, Inc.
Copyright The Helm Authors.
Copyright 2012 The Gorilla Authors. All rights reserved.
Copyright (c) 2012 Rodrigo Moraes. All rights reserved.
Copyright 2021 icza

-------- Dependency
github.com/prometheus/client_golang
-------- Copyrights
Copyright 2018 The Prometheus Authors
Copyright 2012-2015 The Prometheus Authors
Copyright 2013-2015 Blake Mizerany, Björn Rabenstein
Copyright 2010 The Go Authors
Copyright 2013 Matt T. Proud
Copyright 2015 The Prometheus Authors
Copyright 2017 The Prometheus Authors
Copyright 2019 The Prometheus Authors
Copyright 2014 The Prometheus Authors
Copyright 2021 The Prometheus Authors
Copyright 2016 The Prometheus Authors
Copyright 2020 The Prometheus Authors
Copyright (c) 2013, The Prometheus Authors
-------- Notices
Prometheus instrumentation library for Go applications
Copyright 2012-2015 The Prometheus Authors

This product includes software developed at
SoundCloud Ltd. (http://soundcloud.com/).


The following components are included in this product:

perks - a fork of https://github.com/bmizerany/perks
https://github.com/beorn7/perks
Copyright 2013-2015 Blake Mizerany, Björn Rabenstein
See https://github.com/beorn7/perks/blob/master/README.md for license details.

Go support for Protocol Buffers - Google's data interchange format
http://github.com/golang/protobuf/
Copyright 2010 The Go Authors
See source code for license details.

Support for streaming Protocol Buffer messages for the Go language (golang).
https://github.com/matttproud/golang_protobuf_extensions
Copyright 2013 Matt T. Proud
Licensed under the Apache License, Version 2.0


-------- Dependency
github.com/prometheus/client_model
-------- Copyrights
Copyright 2013 Prometheus Team
Copyright 2012-2015 The Prometheus Authors
-------- Notices
Data model artifacts for Prometheus.
Copyright 2012-2015 The Prometheus Authors

This product includes software developed at
SoundCloud Ltd. (http://soundcloud.com/).


-------- Dependency
github.com/prometheus/common
-------- Copyrights
Copyright 2018 The Prometheus Authors
Copyright 2015 The Prometheus Authors
Copyright 2016 The Prometheus Authors
Copyright 2021 The Prometheus Authors
Copyright 2014 The Prometheus Authors
Copyright 2020 The Prometheus Authors
Copyright (c) 2011, Open Knowledge Foundation Ltd.
Copyright 2013 The Prometheus Authors
Copyright 2019 The Prometheus Authors
Copyright 2017 The Prometheus Authors
-------- Notices
Common libraries shared by Prometheus Go components.
Copyright 2015 The Prometheus Authors

This product includes software developed at
SoundCloud Ltd. (http://soundcloud.com/).


-------- Dependency
github.com/prometheus/procfs
-------- Copyrights
Copyright 2018 The Prometheus Authors
Copyright 2014-2015 The Prometheus Authors
Copyright 2019 The Prometheus Authors
Copyright 2017 The Prometheus Authors
Copyright 2021 The Prometheus Authors
Copyright 2020 The Prometheus Authors
Copyright 2014 Prometheus Team
Copyright 2017 Prometheus Team
-------- Notices
procfs provides functions to retrieve system, kernel and process
metrics from the pseudo-filesystem proc.

Copyright 2014-2015 The Prometheus Authors

This product includes software developed at
SoundCloud Ltd. (http://soundcloud.com/).


-------- Dependency
github.com/prometheus/statsd_exporter
-------- Copyrights
Copyright 2013 The Prometheus Authors
Copyright 2018 The Prometheus Authors
Copyright 2013-2015 The Prometheus Authors
Copyright 2020 The Prometheus Authors
Copyright 2019 The Prometheus Authors
Copyright 2021 The Prometheus Authors
-------- Notices
StatsD-to-Prometheus exporter
Copyright 2013-2015 The Prometheus Authors

This product includes software developed at
SoundCloud Ltd. (http://soundcloud.com/).


-------- Dependency
github.com/spf13/cobra
-------- Copyrights
Copyright © 2020 Steve Francia <spf@spf13.com>
Copyright © 2015 Steve Francia <spf@spf13.com>.
Copyright:    copyrightLine(),
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
11 of the WIPO copyright treaty adopted on 20 December 1996, or
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
Copyright    string
copyright": copyrightLine(),
Copyright © 2013 Steve Francia <spf@spf13.com>.
Copyright 2015 Red Hat Inc. All rights reserved.
Copyright 2016 French Ben. All rights reserved.

-------- Dependency
github.com/xeipuuv/gojsonpointer
-------- Copyrights
Copyright 2015 xeipuuv
Copyright 2015 xeipuuv ( https://github.com/xeipuuv )

-------- Dependency
github.com/xeipuuv/gojsonreference
-------- Copyrights
Copyright 2015 xeipuuv
Copyright 2015 xeipuuv ( https://github.com/xeipuuv )

-------- Dependency
github.com/yashtewari/glob-intersection
-------- Copyrights

-------- Dependency
go.opencensus.io
-------- Copyrights
Copyright 2019, OpenCensus Authors
Copyright 2017, OpenCensus Authors
Copyright 2018, OpenCensus Authors
Copyright 2020, OpenCensus Authors

-------- Dependency
gomodules.xyz/jsonpatch/v2
-------- Copyrights

-------- Dependency
google.golang.org/genproto
-------- Copyrights
Copyright 2020 Google LLC.
Copyright 2020 Google LLC
Copyright 2019 Google LLC.
Copyright (c) 2015, Google Inc.
Copyright 2016 Google Inc.
Copyright 2017 Google Inc.
Copyright 2018 Google Inc.
Copyright 2018 Google LLC
Copyright 2018 The Grafeas Authors. All rights reserved.
Copyright 2019 Google LLC

-------- Dependency
google.golang.org/grpc
-------- Copyrights
Copyright 2019 gRPC authors.
Copyright 2017 gRPC authors.
Copyright 2015 The gRPC Authors
Copyright 2016 gRPC authors.
Copyright 2018 gRPC authors.
Copyright 2020 gRPC authors.
Copyright 2020 The gRPC Authors
Copyright 2014 gRPC authors.
Copyright 2018 The gRPC Authors
Copyright 2015 gRPC authors.
Copyright 2019 Istio Authors. All Rights Reserved.
Copyright 2016 The gRPC Authors
Copyright 2015-2016 gRPC authors.

-------- Dependency
gopkg.in/yaml.v2
-------- Copyrights
Copyright (c) 2006 Kirill Simonov
Copyright 2011-2016 Canonical Ltd.
-------- Notices
Copyright 2011-2016 Canonical Ltd.

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.


-------- Dependency
k8s.io/api
-------- Copyrights
Copyright 2019 The Kubernetes Authors.
Copyright The Kubernetes Authors.
Copyright 2017 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2015 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.

-------- Dependency
k8s.io/apiextensions-apiserver
-------- Copyrights
Copyright 2019 The Kubernetes Authors.
Copyright 2017 The Kubernetes Authors.
Copyright The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.

-------- Dependency
k8s.io/apimachinery
-------- Copyrights
Copyright 2017 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright 2014 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.
Copyright 2015 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright The Kubernetes Authors.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.

-------- Dependency
k8s.io/apiserver
-------- Copyrights
Copyright 2014 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright 2015 The Kubernetes Authors.
Copyright 2017 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright The Kubernetes Authors.

-------- Dependency
k8s.io/client-go
-------- Copyrights
Copyright 2016 The Kubernetes Authors.
Copyright 2017 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright 2015 The Kubernetes Authors.
Copyright 2014 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.

-------- Dependency
k8s.io/component-base
-------- Copyrights
Copyright 2017 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.
Copyright 2014 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright The Kubernetes Authors.
Copyright 2015 The Kubernetes Authors.

-------- Dependency
k8s.io/klog/v2
-------- Copyrights
Copyright 2013 Google Inc. All Rights Reserved.
Copyright 2020 The Kubernetes Authors.

-------- Dependency
k8s.io/kube-openapi
-------- Copyrights
Copyright The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright 2017 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.
Copyright 2015 go-swagger maintainers
Copyright (C) MongoDB, Inc. 2017-present.
Copyright 2017 go-swagger maintainers

-------- Dependency
k8s.io/utils
-------- Copyrights
Copyright 2018 The Kubernetes Authors.
Copyright 2017 The Kubernetes Authors.
Copyright 2014 The Kubernetes Authors.
Copyright 2015 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2010 The Go Authors. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.

-------- Dependency
sigs.k8s.io/apiserver-network-proxy/konnectivity-client
-------- Copyrights
Copyright 2019 The Kubernetes Authors.
Copyright The Kubernetes Authors.

-------- Dependency
sigs.k8s.io/controller-runtime
-------- Copyrights
Copyright 2020 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright 2018 The Kubernetes authors.
Copyright 2017 The Kubernetes Authors.
Copyright 2016 The Kubernetes Authors.
Copyright 2014 The Kubernetes Authors.

-------- Dependency
sigs.k8s.io/structured-merge-diff/v4
-------- Copyrights
Copyright 2018 The Kubernetes Authors.
Copyright 2019 The Kubernetes Authors.
Copyright 2020 The Kubernetes Authors.

-------- Dependencies Summary
cloud.google.com/go
contrib.go.opencensus.io/exporter/prometheus
github.com/OneOfOne/xxhash
github.com/go-logr/logr
github.com/go-logr/zapr
github.com/go-openapi/jsonpointer
github.com/go-openapi/jsonreference
github.com/go-openapi/spec
github.com/go-openapi/swag
github.com/golang/glog
github.com/golang/groupcache
github.com/google/gofuzz
github.com/googleapis/gnostic
github.com/matttproud/golang_protobuf_extensions
github.com/modern-go/concurrent
github.com/modern-go/reflect2
github.com/open-policy-agent/cert-controller
github.com/open-policy-agent/frameworks/constraint
github.com/open-policy-agent/opa
github.com/prometheus/client_golang
github.com/prometheus/client_model
github.com/prometheus/common
github.com/prometheus/procfs
github.com/prometheus/statsd_exporter
github.com/spf13/cobra
github.com/xeipuuv/gojsonpointer
github.com/xeipuuv/gojsonreference
github.com/yashtewari/glob-intersection
go.opencensus.io
gomodules.xyz/jsonpatch/v2
google.golang.org/genproto
google.golang.org/grpc
gopkg.in/yaml.v2
k8s.io/api
k8s.io/apiextensions-apiserver
k8s.io/apimachinery
k8s.io/apiserver
k8s.io/client-go
k8s.io/component-base
k8s.io/klog/v2
k8s.io/kube-openapi
k8s.io/utils
sigs.k8s.io/apiserver-network-proxy/konnectivity-client
sigs.k8s.io/controller-runtime
sigs.k8s.io/structured-merge-diff/v4

-------- License used by Dependencies
SPDX:Apache-2.0
                                 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.

----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/PuerkitoBio/urlesc
-------- Copyrights
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.

-------- Dependency
github.com/fsnotify/fsnotify
-------- Copyrights
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright (c) 2012-2019 fsnotify Authors. All rights reserved.
Copyright 2010 The Go Authors. All rights reserved.
Copyright 2012 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.

-------- Dependency
github.com/gogo/protobuf
-------- Copyrights
Copyright (c) 2013, The GoGo Authors. All rights reserved.
Copyright 2010 The Go Authors.  All rights reserved.
Copyright 2010 The Go Authors.
Copyright (c) 2015, The GoGo Authors. All rights reserved.
Copyright 2016 The Go Authors.  All rights reserved.
Copyright 2015 The Go Authors.  All rights reserved.
Copyright 2011 The Go Authors.  All rights reserved.
Copyright (c) 2018, The GoGo Authors. All rights reserved.
Copyright 2018 The Go Authors.  All rights reserved.
Copyright 2017 The Go Authors.  All rights reserved.
Copyright (c) 2016, The GoGo Authors. All rights reserved.
Copyright 2014 The Go Authors.  All rights reserved.
Copyright 2012 The Go Authors.  All rights reserved.
Copyright 2013 The Go Authors.  All rights reserved.
Copyright (c) 2019, The GoGo Authors. All rights reserved.
Copyright (c) 2017, The GoGo Authors. All rights reserved.
Copyright (c) 2015, The GoGo Authors.  rights reserved.

-------- Dependency
github.com/golang/protobuf
-------- Copyrights
Copyright 2010 The Go Authors.  All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2010 The Go Authors. All rights reserved.
Copyright 2014 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors.  All rights reserved.

-------- Dependency
github.com/google/go-cmp
-------- Copyrights
Copyright (c) 2017 The Go Authors. All rights reserved.
Copyright 2017, The Go Authors. All rights reserved.
Copyright 2021, The Go Authors. All rights reserved.
Copyright 2020, The Go Authors. All rights reserved.
Copyright 2018, The Go Authors. All rights reserved.
Copyright 2019, The Go Authors. All rights reserved.

-------- Dependency
github.com/google/uuid
-------- Copyrights
Copyright (c) 2009,2014 Google Inc. All rights reserved.
Copyright 2016 Google Inc.  All rights reserved.
Copyright 2017 Google Inc.  All rights reserved.
Copyright 2018 Google Inc.  All rights reserved.

-------- Dependency
github.com/imdario/mergo
-------- Copyrights
Copyright (c) 2013 Dario Castañé. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright 2013 Dario Castañé. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.
Copyright 2014 Dario Castañé. All rights reserved.

-------- Dependency
github.com/spf13/pflag
-------- Copyrights
Copyright (c) 2012 Alex Ogier. All rights reserved.
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.
Copyright 2012 The Go Authors. All rights reserved.
Copyright 2010 The Go Authors.  All rights reserved.

-------- Dependency
golang.org/x/crypto
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.
Copyright 2010 The Go Authors. All rights reserved.
Copyright 2012 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2014 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
golang.org/x/net
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2014 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2010 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.
Copyright 2012 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.
Copyright (C) 2009 Apple Inc. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2021 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
golang.org/x/oauth2
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2017 The oauth2 Authors. All rights reserved.
Copyright 2021 The Go Authors. All rights reserved.
Copyright 2015 The oauth2 Authors. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2014 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2018 The oauth2 Authors. All rights reserved.

-------- Dependency
golang.org/x/sync
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
golang.org/x/sys
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2012 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2010 The Go Authors. All rights reserved.
Copyright 2014 The Go Authors. All rights reserved.
Copyright 2021 The Go Authors. All rights reserved.
Copyright 2009,2010 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All right reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
golang.org/x/term
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
golang.org/x/text
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2014 The Go Authors. All rights reserved.
Copyright 2016 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
Copyright 2017 The Go Authors. All rights reserved.
Copyright 2012 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2009 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
golang.org/x/time
-------- Copyrights
Copyright (c) 2009 The Go Authors. All rights reserved.
Copyright 2015 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
google.golang.org/protobuf
-------- Copyrights
Copyright (c) 2018 The Go Authors. All rights reserved.
Copyright 2018 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.
Copyright 2020 The Go Authors. All rights reserved.
Copyright 2019 The Go Authors. All rights reserved.",
Copyright 2018 The Go Authors. All rights reserved.",
Copyright 2008 Google Inc.  All rights reserved.
Copyright 2021 The Go Authors. All rights reserved.
-------- Patents
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the Go project.

Google 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,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go.  This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation.  If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.


-------- Dependency
gopkg.in/inf.v0
-------- Copyrights
Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go

-------- Dependencies Summary
github.com/PuerkitoBio/urlesc
github.com/fsnotify/fsnotify
github.com/gogo/protobuf
github.com/golang/protobuf
github.com/google/go-cmp
github.com/google/uuid
github.com/imdario/mergo
github.com/spf13/pflag
golang.org/x/crypto
golang.org/x/net
golang.org/x/oauth2
golang.org/x/sync
golang.org/x/sys
golang.org/x/term
golang.org/x/text
golang.org/x/time
google.golang.org/protobuf
gopkg.in/inf.v0

-------- License used by Dependencies
SPDX:BSD-3-Clause--modified-by-Google
Redistribution and use in source and binary forms, with 
or without modification, are permitted provided that the following conditions
are met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/davecgh/go-spew
-------- Copyrights
Copyright (c) 2012-2016 Dave Collins <dave@davec.name>
Copyright (c) 2015-2016 Dave Collins <dave@davec.name>
Copyright (c) 2013-2016 Dave Collins <dave@davec.name>
Copyright (c) 2013 Dave Collins <dave@davec.name>

-------- Dependencies Summary
github.com/davecgh/go-spew

-------- License used by Dependencies
SPDX:ISC
Permission to use, copy, modify, and/or distribute this 
software for any purpose with or without fee is hereby granted, provided that 
the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
PERFORMANCE OF THIS SOFTWARE.

----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/asaskevich/govalidator
-------- Copyrights
Copyright (c) 2014-2020 Alex Saskevich

-------- Dependency
github.com/beorn7/perks
-------- Copyrights
Copyright (C) 2013 Blake Mizerany

-------- Dependency
github.com/blang/semver
-------- Copyrights
Copyright (c) 2014 Benedikt Lang <github at benediktlang.de>

-------- Dependency
github.com/cespare/xxhash/v2
-------- Copyrights
Copyright (c) 2016 Caleb Spare

-------- Dependency
github.com/go-kit/log
-------- Copyrights
Copyright (c) 2021 Go kit
Copyright (c) 2014 Simon Eskildsen
Copyright 2013 The Go Authors. All rights reserved.
Copyright 2011 The Go Authors. All rights reserved.

-------- Dependency
github.com/go-logfmt/logfmt
-------- Copyrights
Copyright (c) 2015 go-logfmt
Copyright 2010 The Go Authors. All rights reserved.

-------- Dependency
github.com/gobwas/glob
-------- Copyrights
Copyright (c) 2016 Sergey Kamardin

-------- Dependency
github.com/josharian/intern
-------- Copyrights
Copyright (c) 2019 Josh Bleecher Snyder

-------- Dependency
github.com/json-iterator/go
-------- Copyrights
Copyright (c) 2016 json-iterator

-------- Dependency
github.com/mailru/easyjson
-------- Copyrights
Copyright (c) 2016 Mail.Ru Group
Copyright (c) 2009 The Go Authors. All rights reserved.

-------- Dependency
github.com/mitchellh/mapstructure
-------- Copyrights
Copyright (c) 2013 Mitchell Hashimoto

-------- Dependency
go.uber.org/atomic
-------- Copyrights
Copyright (c) 2016 Uber Technologies, Inc.
Copyright (c) 2019 Uber Technologies, Inc.

-------- Dependency
go.uber.org/multierr
-------- Copyrights
Copyright (c) 2017 Uber Technologies, Inc.
Copyright (c) 2019 Uber Technologies, Inc.

-------- Dependency
go.uber.org/zap
-------- Copyrights
Copyright (c) 2016-2017 Uber Technologies, Inc.
Copyright (c) 2016 Uber Technologies, Inc.
Copyright (c) "*" Uber Technologies, Inc.")
Copyright (c) 2017 Uber Technologies, Inc.
Copyright (c) 2019 Uber Technologies, Inc.
Copyright (c) 2020 Uber Technologies, Inc.
Copyright (c) 2016, 2017 Uber Technologies, Inc.
Copyright (c) 2018 Uber Technologies, Inc.

-------- Dependency
gopkg.in/yaml.v3
-------- Copyrights
copyright staring in 2011 when the project was ported over:
Copyright (c) 2006-2010 Kirill Simonov
Copyright (c) 2006-2011 Kirill Simonov
Copyright (c) 2011-2019 Canonical Ltd
Copyright 2011-2016 Canonical Ltd.
-------- Notices
Copyright 2011-2016 Canonical Ltd.

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 Summary
github.com/asaskevich/govalidator
github.com/beorn7/perks
github.com/blang/semver
github.com/cespare/xxhash/v2
github.com/go-kit/log
github.com/go-logfmt/logfmt
github.com/gobwas/glob
github.com/josharian/intern
github.com/json-iterator/go
github.com/mailru/easyjson
github.com/mitchellh/mapstructure
go.uber.org/atomic
go.uber.org/multierr
go.uber.org/zap
gopkg.in/yaml.v3

-------- License used by Dependencies
SPDX:MIT
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
(the "Software"), to deal in the Software without restriction, including without
limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom
the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

----------------------- Dependencies Grouped by License ------------
-------- Dependency
github.com/ghodss/yaml
-------- Copyrights
Copyright (c) 2014 Sam Ghods
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.

-------- Dependency
sigs.k8s.io/yaml
-------- Copyrights
Copyright (c) 2014 Sam Ghods
Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright 2013 The Go Authors. All rights reserved.

-------- Dependencies Summary
github.com/ghodss/yaml
sigs.k8s.io/yaml

-------- License used by Dependencies
The MIT License (MIT)

Copyright (c) 2014 Sam Ghods

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


Copyright (c) 2012 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


ATTRIBUTION-HELPER-GENERATED:
License file based on go.mod with md5 sum: 8e6c0582e13472356e90672b8842731d


================================================
FILE: data-common.tf
================================================
# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

locals {
  state_id = coalesce(var.state_id, random_string.state_id.id)
}

resource "random_string" "state_id" {
  length  = 6
  lower   = true
  numeric = false
  special = false
  upper   = false
}

output "state_id" {
  value = local.state_id
}


================================================
FILE: data-images.tf
================================================
# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

# Used to retrieve available worker node images, k8s versions, shapes...
data "oci_containerengine_node_pool_option" "oke" {
  count               = local.cluster_enabled ? 1 : 0
  node_pool_option_id = "all"
  compartment_id      = local.compartment_id
}

locals {
  k8s_versions      = toset(concat([var.kubernetes_version], [for k, v in var.worker_pools : lookup(v, "kubernetes_version", "") if lookup(v, "kubernetes_version", "") != ""]))
  k8s_versions_only = [for k8_version in local.k8s_versions : trimprefix(lower(k8_version), "v")]

  # OKE managed node pool images
  node_pool_images = try(one(data.oci_containerengine_node_pool_option.oke[*].sources), [])

  # Parse platform/operating system information from node pool image names
  indexed_images = try({
    for k, v in local.node_pool_images : v.image_id => merge(
      try(element(regexall("OKE-(?P<k8s_version>[0-9\\.]+)-(?P<build>[0-9]+)", v.source_name), 0), { k8s_version = "none" }),
      {
        arch        = length(regexall("aarch64", v.source_name)) > 0 ? "aarch64" : "x86_64"
        image_type  = length(regexall("OKE", v.source_name)) > 0 ? "oke" : "platform"
        is_gpu      = length(regexall("GPU", v.source_name)) > 0
        os          = trimspace(replace(element(regexall("^[a-zA-Z-]+", v.source_name), 0), "-", " "))
        os_version  = element(regexall("[0-9\\.]+", v.source_name), 0)
        sort_key    = replace(try(join(".", regex("-([0-9]{4}\\.[01][0-9].[0-9]{1,2}).*?-([0-9]+)$", v.source_name)), v.source_name), ".", "")
        source_name = v.source_name
      },
    )
  }, {})

  # Create non-exclusive groupings of image IDs for intersection when selecting based on config and instance shape
  image_ids = try(merge({
    x86_64   = [for k, v in local.indexed_images : k if v.arch == "x86_64"]
    aarch64  = [for k, v in local.indexed_images : k if v.arch == "aarch64"]
    oke      = [for k, v in local.indexed_images : k if v.image_type == "oke" && contains(local.k8s_versions_only, v.k8s_version)]
    platform = [for k, v in local.indexed_images : k if v.image_type == "platform"]
    gpu      = [for k, v in local.indexed_images : k if v.is_gpu]
    nongpu   = [for k, v in local.indexed_images : k if !v.is_gpu]
    }, {
    # Include groups for OS name and major version
    # https://developer.hashicorp.com/terraform/language/expressions/for#grouping-results
    for k, v in local.indexed_images : format("%v %v", v.os, split(".", v.os_version)[0]) => k...
    }, {
    # Include groups for referenced Kubernetes versions
    for k, v in local.indexed_images : format("%v", v.k8s_version) => k... if contains(local.k8s_versions_only, v.k8s_version)
  }), {})
}


================================================
FILE: docs/diagrams.md
================================================
# Diagrams

This page collects the currently relevant architecture diagrams for the module.

## Default topologies

### Default Multi-AD topology

![Default Multi-AD topology](./images/defaultmad-large.svg)

Shows the default regional deployment spread across multiple availability domains. The control plane, worker nodes, bastion, operator, and load balancer subnets are separated so the module can provide both public entry points and private east-west traffic paths.

### Default Single-AD topology

![Default Single-AD topology](./images/defaultsad-large.svg)

Shows the same baseline layout constrained to a single availability domain. This is the simpler topology when multi-AD placement is not required or not available in the target region.

## Network and access

### Network layout

![Network layout](./images/networking-large.svg)

Illustrates how the module divides the VCN into functional subnets and NSG boundaries. Use it to understand where the control plane, workers, pods, and load balancers live and how traffic is expected to flow between them.

### Load balancer layout

![Load balancer layout](./images/loadbalancers-large.svg)

Highlights the public and internal load balancer subnet choices. This is the diagram to consult when deciding how to set `load_balancers`, `preferred_load_balancer`, and the related service exposure model.

### Bastion access layout

![Bastion access layout](./images/bastion-large.svg)

Shows the administrative access path into the VCN through the bastion host. It is useful when validating SSH reachability to private resources such as the operator or worker nodes.

## Exposure variants

### Public control plane topology

![Public control plane topology](./images/publiccluster-large.svg)

Shows the variant where the Kubernetes API endpoint is reachable through a public address. This is the most direct management model, but it also requires tighter control of the allowed CIDR ranges.

### Private control plane topology

![Private control plane topology](./images/privatecluster-large.svg)

Shows the variant where the Kubernetes API endpoint stays private inside the VCN. This is the preferred layout when cluster administration should happen from the bastion, operator, or connected private networks only.

### Public workers topology

![Public workers topology](./images/publicworkers-large.svg)

Shows worker nodes with public IPs and direct outbound reachability. This can simplify bootstrap and troubleshooting, but it expands the exposed surface compared with private workers.

### Private workers topology

![Private workers topology](./images/privateworkers-large.svg)

Shows worker nodes kept on private addresses behind the VCN gateways. This is the more typical production posture when outbound access is routed through NAT or service gateways instead of direct public addressing.

## Identity

### OIDC discovery flow

![OIDC discovery flow](./images/oidc-discovery.png)

Explains the OIDC discovery integration exposed by the cluster. Use it when enabling `oidc_discovery_enabled` or documenting how external identity providers and token validation interact with the OKE API server.


================================================
FILE: docs/prerequisites.md
================================================
# Pre-requisites

[Quick Start guide](https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/quickstart.md)

This section will guide you through the pre-requisites before you can use this project.

You can proceed to the [Quick Start guide](https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/quickstart.md) if you have already done these.

1. [Install Terraform](#install-terraform)
2. [Generate and upload your OCI API keys](#generate-and-upload-your-oci-api-keys)
3. [Create an OCI compartment](#create-an-oci-compartment)
4. [Obtain the necessary OCIDs](#obtain-the-necessary-ocids)
5. [Generate an SSH key pair](#generate-an-ssh-key-pair)
6. [Identity and Access Management Rights](#identity-and-access-management-rights)

### Install Terraform

Start by installing Terraform and configuring your path. You need version 1.3.0+.

#### Installing Terraform on Oracle Linux

```bash
yum -y install oraclelinux-developer-release-el7 && yum -y install terraform
```

#### Installing Terraform on macOS

```bash
brew install terraform
```

#### Manual Installation

1. Open your browser and navigate to the [Terraform download page](https://www.terraform.io/downloads.html). You need version 1.3.0+.
2. Download the appropriate version for your operating system.
3. Extract the contents of the compressed file and copy the `terraform` binary to a location that is in your path.

##### Configure path on Linux/macOS

```bash
sudo mv /path/to/terraform /usr/local/bin
```

##### Configure path on Windows

1. Click on `Start`, type `Control Panel` and open it.
2. Select `System > Advanced System Settings > Environment Variables`.
3. Select `System variables > PATH` and click `Edit`.
4. Click `New` and paste the location of the directory where you extracted `terraform.exe`.
5. Close all open windows by clicking `OK`.
6. Open a new terminal and verify Terraform has been properly installed.

#### Testing Terraform installation

```bash
terraform -v
Terraform v1.x.x
```

### Generate and upload your OCI API keys

Follow the documentation for [generating and uploading your API keys](https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm#two).

Note the key fingerprint.

### Create an OCI compartment

Follow the documentation for [creating a compartment](https://docs.cloud.oracle.com/iaas/Content/Identity/Tasks/managingcompartments.htm#two).

### Obtain the necessary OCIDs

The following OCIDs are required:

1. Compartment OCID
2. Tenancy OCID
3. User OCID

Follow the documentation for [obtaining the tenancy and user OCIDs](https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm#five).

To obtain the compartment OCID:

1. Navigate to `Identity > Compartments`.
2. Click on your compartment.
3. Locate `OCID` on the page and click `Copy`.

### Generate an SSH key pair

An SSH key pair is required for access to the bastion and operator hosts. Generate one if you don't have one:

```bash
ssh-keygen -t rsa -b 4096 -f ~/.ssh/oke_key
```

This creates `~/.ssh/oke_key` (private key) and `~/.ssh/oke_key.pub` (public key).

### Identity and Access Management Rights

The user or group running Terraform needs the following permissions:

| Permission | Purpose |
|------------|---------|
| `manage all-resources in compartment` | Full management of all OKE resources |
| `manage instance-family in compartment` | Create and manage compute instances |
| `manage virtual-network-family in compartment` | Create and manage VCN, subnets, NSGs |
| `manage cluster-family in compartment` | Create and manage OKE clusters |
| `manage volume-family in compartment` | Create and manage block volumes |
| `manage dynamic-groups in tenancy` | Create IAM dynamic groups (if `create_iam_resources = true`) |
| `manage policies in tenancy` | Create IAM policies (if `create_iam_resources = true`) |

For a least-privilege setup, set `create_iam_resources = true` and the module will create the required dynamic groups and policies automatically.


================================================
FILE: docs/quickstart.md
================================================
# Quickstart

1. [Assumptions](#assumptions)
2. [Pre-requisites](#pre-requisites)
3. [Instructions](#instructions)
4. [Connect to the cluster](#connect-to-the-cluster)
5. [Update the cluster](#update-the-cluster)
6. [Destroy the cluster](#destroy-the-cluster)
7. [Related documentation](#related-documentation)

### Assumptions

1. You have set up the [required API keys](https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm).
2. You know the [required OCIDs](https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm#five).
3. You have the necessary [permissions](./prerequisites.md#identity-and-access-management-rights).
4. You have an SSH key pair available.

### Pre-requisites

1. `git` is installed.
2. An SSH client is installed.
3. Terraform 1.3.0+ is installed.

See [Pre-requisites](./prerequisites.md) for detailed setup instructions.

### Instructions

#### Provisioning using this git repo

1. Clone the repo:

```bash
git clone https://github.com/oracle-terraform-modules/terraform-oci-oke.git tfoke

cd tfoke
```

Create a `terraform.tfvars` file for your environment. This repository does not ship a generic root `terraform.tfvars.example`.

2. Create a `provider.tf` file and add the following:

```hcl
terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = ">= 7.30.0"
    }
  }
}

provider "oci" {
  tenancy_ocid     = var.tenancy_id
  user_ocid        = var.user_id
  fingerprint      = var.api_fingerprint
  private_key_path = var.api_private_key_path
  region           = var.region
}

provider "oci" {
  alias            = "home"
  tenancy_ocid     = var.tenancy_id
  user_ocid        = var.user_id
  fingerprint      = var.api_fingerprint
  private_key_path = var.api_private_key_path
  region           = coalesce(var.home_region, var.region)
}
```

Provider credentials are intentionally configured in `provider.tf`, not in `terraform.tfvars`.

3. Set mandatory provider parameters:

- `api_fingerprint`
- `api_private_key_path`
- `region`
- `tenancy_id`
- `user_id`

4. Set other required parameters:

- `compartment_id`
- One of `ssh_public_key` or `ssh_public_key_path`

5. Set cluster and worker parameters. At minimum, configure:

```hcl
# Cluster
create_cluster     = true
cluster_name       = "oke-cluster"
kubernetes_version = "v1.34.2"

# Workers
worker_pool_mode = "node-pool"
worker_pool_size = 1

worker_pools = {
  np1 = {
    size  = 1
  }
}
```

6. Optional parameters to override (see [Terraform Options](./terraformoptions.md) for the full list):

- Cluster: `cluster_type`, `cni_type`, `control_plane_is_public`, `pods_cidr`, `services_cidr`
- Workers: `worker_shape`, `worker_image_type`, `worker_image_os`, `worker_image_os_version`
- Network: `vcn_cidrs`, `subnets`, `nsgs`, `load_balancers`
- Bastion: `create_bastion`, `bastion_shape`, `bastion_allowed_cidrs`
- Operator: `create_operator`, `operator_shape`, `operator_upgrade`

7. Run Terraform:

```bash
terraform init
terraform plan
terraform apply
```

8. Retrieve the cluster and access information:

```bash
terraform output cluster_id
terraform output cluster_endpoints
terraform output ssh_to_bastion
terraform output ssh_to_operator
```

If you want Terraform to emit `cluster_kubeconfig`, also set:

```hcl
output_detail = true
```

### Connect to the cluster

#### Via the operator host

1. SSH to the operator through the bastion:

```bash
# Use the output from terraform output ssh_to_operator
ssh -o ProxyCommand='ssh -W %h:%p -i ~/.ssh/oke_key opc@<bastion_ip>' -i ~/.ssh/oke_key opc@<operator_ip>
```

2. Verify connectivity:

```bash
kubectl get nodes
```

#### Via kubeconfig

1. Retrieve the kubeconfig:

```bash
terraform output -raw cluster_kubeconfig > ~/.kube/config-oke
export KUBECONFIG=~/.kube/config-oke
```

`cluster_kubeconfig` is only populated when `output_detail = true`.

2. Verify connectivity:

```bash
kubectl get nodes
```

### Update the cluster

To update the infrastructure:

```bash
# Modify terraform.tfvars as needed
terraform plan
terraform apply
```

Common updates:
- **Kubernetes version**: Change `kubernetes_version` and run `terraform apply`
- **Worker pool size**: Adjust `worker_pool_size` or individual pool `size`
- **Add worker pools**: Add entries to the `worker_pools` map
- **Extensions**: Enable extensions by setting `<extension>_install = true`

### Destroy the cluster

```bash
terraform destroy
```

### Related documentation

- [All Terraform configuration options](./terraformoptions.md) for this module
- [Example configurations](https://github.com/oracle-terraform-modules/terraform-oci-oke/tree/main/examples)
- [Pre-requisites](./prerequisites.md)


================================================
FILE: docs/terraformoptions.md
================================================
# Terraform Options

Configuration Terraform Options:

1. [General](#general)
2. [Identity and Access Management](#identity-and-access-management)
3. [Network](#network)
4. [Cluster](#cluster)
5. [Cluster Add-ons](#cluster-add-ons)
6. [Workers](#workers)
7. [Bastion](#bastion)
8. [Operator](#operator)
9. [Extensions](#extensions)
   - [Cilium](#cilium)
   - [Multus](#multus)
   - [SR-IOV Device Plugin](#sr-iov-device-plugin)
   - [SR-IOV CNI Plugin](#sr-iov-cni-plugin)
   - [RDMA CNI Plugin](#rdma-cni-plugin)
   - [Whereabouts](#whereabouts)
   - [Metrics Server](#metrics-server)
   - [Cluster Autoscaler](#cluster-autoscaler)
   - [Prometheus](#prometheus)
   - [DCGM Exporter](#dcgm-exporter)
   - [Gatekeeper](#gatekeeper)
   - [MPI Operator](#mpi-operator)
   - [ArgoCD](#argocd)
   - [Service Accounts](#service-accounts)
10. [Utilities](#utilities)
11. [Tagging](#tagging)
12. [Validation Rules](#validation-rules)

## General

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `state_id` | Optional Terraform state_id from an existing deployment for resource reuse. | string | `null` |
| `output_detail` | Whether to include detailed output in the Terraform state. | `true` / `false` | `false` |
| `timezone` | Preferred timezone for worker, operator, and bastion instances. | string (IANA timezone) | `"Etc/UTC"` |
| `ssh_private_key` | SSH private key contents, optionally base64-encoded. Sensitive. | string | `null` |
| `ssh_private_key_path` | Path to SSH private key on the machine running Terraform. | string | `null` |
| `ssh_public_key` | SSH public key contents, optionally base64-encoded. | string | `null` |
| `ssh_public_key_path` | Path to SSH public key. | string | `null` |

## Identity and Access Management

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `tenancy_id` | Tenancy OCID. Required unless using `config_file_profile` or Resource Manager. | OCID string | `null` |
| `tenancy_ocid` | Tenancy OCID for Resource Manager. Used as alias for `tenancy_id` in RMS. | OCID string | `null` |
| `user_id` | User OCID for API key authentication. | OCID string | `null` |
| `current_user_ocid` | User OCID for Resource Manager. | OCID string | `null` |
| `compartment_id` | Compartment OCID where resources are created. Required. | OCID string | `null` |
| `compartment_ocid` | Compartment OCID for Resource Manager. | OCID string | `null` |
| `worker_compartment_id` | Compartment for worker resources. Defaults to `compartment_id`. | OCID string | `null` |
| `network_compartment_id` | Compartment for network resources. Defaults to `compartment_id`. | OCID string | `null` |
| `region` | OCI region for resource provisioning. | [OCI region identifier](https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm) | `"us-ashburn-1"` |
| `home_region` | Tenancy home region. Required when `create_iam_resources = true`. | OCI region identifier | `null` |
| `api_fingerprint` | Fingerprint of the OCI API public key. | string | `null` |
| `api_private_key` | OCI API private key contents. Sensitive. | string | `null` |
| `api_private_key_password` | Password for the OCI API private key. Sensitive. | string | `null` |
| `api_private_key_path` | Path to the OCI API private key file. | string | `null` |
| `config_file_profile` | OCI CLI config file profile name for authentication. | string | `"DEFAULT"` |
| `create_iam_resources` | Whether to create IAM dynamic groups and policies. | `true` / `false` | `false` |
| `create_iam_autoscaler_policy` | Create IAM policy for cluster autoscaler. | `"never"` / `"auto"` / `"always"` | `"auto"` |
| `create_iam_kms_policy` | Create IAM policy for KMS encryption. | `"never"` / `"auto"` / `"always"` | `"auto"` |
| `create_iam_operator_policy` | Create IAM policy for operator instance principal. | `"never"` / `"auto"` / `"always"` | `"auto"` |
| `create_iam_worker_policy` | Create IAM policy for worker nodes. | `"never"` / `"auto"` / `"always"` | `"auto"` |
| `create_iam_tag_namespace` | Create IAM tag namespace and tags. | `true` / `false` | `false` |
| `create_iam_defined_tags` | Create IAM defined tags in the tag namespace. | `true` / `false` | `false` |
| `use_defined_tags` | Apply defined tags to created resources. | `true` / `false` | `false` |
| `tag_namespace` | Tag namespace name for OKE defined tags. | string | `"oke"` |

## Network

Relevant diagrams:
- [Network layout](./diagrams.md#network-layout)
- [Load balancer layout](./diagrams.md#load-balancer-layout)
- [Bastion access layout](./diagrams.md#bastion-access-layout)

### VCN

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `create_vcn` | Whether to create a VCN. Set to `false` to use an existing VCN. | `true` / `false` | `true` |
| `vcn_name` | Display name for the VCN. | string | `null` |
| `vcn_id` | OCID of an existing VCN. Required when `create_vcn = false`. | OCID string | `null` |
| `vcn_cidrs` | IPv4 CIDR blocks for the VCN. | list(string) | `["10.0.0.0/16"]` |
| `vcn_dns_label` | DNS label for the VCN. | string | `null` |
| `vcn_enable_ipv6_gua` | Enable IPv6 Global Unicast Address. | `true` / `false` | `true` |
| `vcn_ipv6_ula_cidrs` | IPv6 ULA CIDR blocks for the VCN. | list(string) | `[]` |
| `assign_dns` | Whether to assign DNS records to created instances and subnet hostname labels. | `true` / `false` | `true` |
| `lockdown_default_seclist` | Remove all default rules from the VCN default security list. | `true` / `false` | `true` |

### Gateways

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `vcn_create_internet_gateway` | Create an internet gateway. | `"auto"` / `"always"` / `"never"` | `"auto"` |
| `vcn_create_nat_gateway` | Create a NAT gateway. | `"auto"` / `"always"` / `"never"` | `"auto"` |
| `vcn_create_service_gateway` | Create a service gateway. | `"auto"` / `"always"` / `"never"` | `"always"` |
| `internet_gateway_id` | OCID of an existing internet gateway. | OCID string | `null` |
| `nat_gateway_id` | OCID of an existing NAT gateway. | OCID string | `null` |
| `nat_gateway_public_ip_id` | Reserved public IP OCID for the NAT gateway. | OCID string | `null` |

### Routing

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `ig_route_table_id` | OCID of an existing internet gateway route table. | OCID string | `null` |
| `nat_route_table_id` | OCID of an existing NAT gateway route table. | OCID string | `null` |
| `igw_ngw_mixed_route_id` | OCID of a mixed route table (NAT GW for IPv4, IGW for IPv6). | OCID string | `null` |
| `internet_gateway_route_rules` | Additional route rules for the internet gateway route table. | list(map(string)) | `null` |
| `nat_gateway_route_rules` | Additional route rules for the NAT gateway route table. | list(map(string)) | `null` |

### DRG

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `create_drg` | Whether to create a Dynamic Routing Gateway. | `true` / `false` | `false` |
| `drg_display_name` | Display name for the DRG. | string | `null` |
| `drg_id` | OCID of an existing DRG. | OCID string | `null` |
| `drg_compartment_id` | Compartment for the DRG. Defaults to `network_compartment_id`. | OCID string | `null` |
| `drg_attachments` | DRG attachment configurations. | map(any) | `{}` |
| `remote_peering_connections` | Remote peering connection configurations. | map(any) | `{}` |
| `local_peering_gateways` | Local peering gateway configurations. | map(any) | `null` |

### Subnets

See [Network layout](./diagrams.md#network-layout) for the default subnet split used by the module.

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `subnets` | Configuration for standard subnets (bastion, operator, cp, int_lb, pub_lb, workers, pods). Each entry supports `create`, `id`, `cidr`, `netnum`, `newbits`, `display_name`, `dns_label`, and `ipv6_cidr`. | map(object) | Module-defined defaults for all standard subnets |

Example with automatic subnet creation:

```hcl
subnets = {
  bastion  = { newbits = 13 }
  operator = { newbits = 13 }
  cp       = { newbits = 13 }
  int_lb   = { newbits = 11 }
  pub_lb   = { newbits = 11 }
  workers  = { newbits = 4 }
  pods     = { newbits = 2 }
}
```

Example with explicit CIDRs:

```hcl
subnets = {
  bastion  = { cidr = "10.0.0.0/29" }
  operator = { cidr = "10.0.0.64/29" }
  cp       = { cidr = "10.0.0.8/29" }
  int_lb   = { cidr = "10.0.0.32/27" }
  pub_lb   = { cidr = "10.0.128.0/27" }
  workers  = { cidr = "10.0.144.0/20" }
  pods     = { cidr = "10.0.64.0/18" }
}
```

Example with existing subnets:

```hcl
subnets = {
  operator = { id = "ocid1.subnet..." }
  cp       = { id = "ocid1.subnet..." }
  workers  = { id = "ocid1.subnet..." }
}
```

### Network Security Groups

See [Network layout](./diagrams.md#network-layout) for how the NSG-backed subnet boundaries fit together.

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `nsgs` | Configuration for NSGs (bastion, operator, cp, int_lb, pub_lb, workers, pods, optional `fss`). Each entry supports `create` and `id`. | map(object) | Module-defined defaults for standard NSGs |
| `allow_node_port_access` | Allow NodePort access to load balancers. | `true` / `false` | `false` |
| `allow_worker_internet_access` | Allow worker nodes outbound internet access. | `true` / `false` | `true` |
| `allow_pod_internet_access` | Allow pod outbound internet access. | `true` / `false` | `true` |
| `allow_worker_ssh_access` | Allow SSH access to worker nodes. | `true` / `false` | `false` |
| `allow_bastion_cluster_access` | Allow bastion to cluster endpoint access. | `true` / `false` | `false` |
| `allow_rules_cp` | Additional NSG rules for the control plane. | map(any) | `{}` |
| `allow_rules_internal_lb` | Additional NSG rules for internal load balancers. | map(any) | `{}` |
| `allow_rules_pods` | Additional NSG rules for pods. | map(any) | `{}` |
| `allow_rules_public_lb` | Additional NSG rules for public load balancers. | map(any) | `{}` |
| `allow_rules_workers` | Additional NSG rules for workers. | map(any) | `{}` |
| `control_plane_allowed_cidrs` | CIDR blocks allowed to access the control plane. | list(string) | `[]` |
| `enable_waf` | Enable WAF monitoring for load balancers. | `true` / `false` | `false` |
| `use_stateless_rules` | Use stateless NSG rules instead of stateful. | `true` / `false` | `false` |

Additional NSG rule example:

```hcl
allow_rules_workers = {
  "Allow TCP 8080 from VCN" = {
    protocol = 6, port = 8080, source = "10.0.0.0/16", source_type = "CIDR_BLOCK",
  },
}
```

## Cluster

Relevant diagrams:
- [Public control plane topology](./diagrams.md#public-control-plane-topology)
- [Private control plane topology](./diagrams.md#private-control-plane-topology)
- [OIDC discovery flow](./diagrams.md#oidc-discovery-flow)

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `create_cluster` | Whether to create an OKE cluster. | `true` / `false` | `true` |
| `cluster_name` | Name of the OKE cluster. | string | `"oke"` |
| `cluster_type` | Cluster type. Enhanced clusters support additional features like virtual node pools and workload identity. | `"basic"` / `"enhanced"` | `"basic"` |
| `control_plane_is_public` | Whether the control plane has a public IP. | `true` / `false` | `false` |
| `assign_public_ip_to_control_plane` | Assign a public IP to the API endpoint. | `true` / `false` | `false` |
| `control_plane_nsg_ids` | Additional NSG IDs for the cluster endpoint. | set(string) | `[]` |
| `backend_nsg_ids` | Additional NSG IDs for load balancer backends. Workers and pods NSGs are always included. | set(string) | `[]` |
| `cni_type` | Container Network Interface type. | `"flannel"` / `"npn"` | `"flannel"` |
| `enable_ipv6` | Create a dual-stack (IPv4 and IPv6) cluster. | `true` / `false` | `false` |
| `oke_ip_families` | Override the `ip_families` cluster attribute. | list(string) | `[]` |
| `pods_cidr` | CIDR range for Kubernetes pods. Must not overlap with VCN, worker, or LB subnets. | CIDR string | `"10.244.0.0/16"` |
| `services_cidr` | CIDR range for Kubernetes services. Must not overlap with the VCN CIDR. | CIDR string | `"10.96.0.0/16"` |
| `kubernetes_version` | Kubernetes version for the cluster. | string (e.g. `"v1.34.2"`) | `"v1.34.2"` |
| `cluster_kms_key_id` | KMS key OCID for Kubernetes secrets encryption. | OCID string | `""` |
| `use_signed_images` | Enforce that only signed container images can be deployed. | `true` / `false` | `false` |
| `image_signing_keys` | KMS key IDs used to verify signed images. | set(string) | `[]` |
| `load_balancers` | Type of subnets created for load balancers. | `"public"` / `"internal"` / `"both"` | `"both"` |
| `preferred_load_balancer` | Preferred load balancer subnet type. | `"public"` / `"internal"` | `"public"` |
| `oidc_discovery_enabled` | Enable OIDC discovery for third-party token validation. Requires enhanced cluster. | `true` / `false` | `false` |
| `oidc_token_auth_enabled` | Enable OIDC token authentication via API server flags. Requires enhanced cluster. | `true` / `false` | `false` |
| `oidc_token_authentication_config` | OIDC token authentication configuration (client_id, issuer_url, username_claim, required_claims). | any | `{}` |

Basic cluster example:

```hcl
cluster_name       = "oke-example"
kubernetes_version = "v1.34.2"
```

Enhanced cluster example:

```hcl
cluster_name                      = "oke"
cluster_type                      = "enhanced"
cni_type                          = "flannel"
kubernetes_version                = "v1.34.2"
assign_public_ip_to_control_plane = true
```

OIDC authentication example for GitHub Actions:

```hcl
cluster_type                      = "enhanced"
oidc_token_auth_enabled           = true
oidc_token_authentication_config  = {
  client_id      = "oke-kubernetes-cluster"
  issuer_url     = "https://token.actions.githubusercontent.com"
  username_claim = "sub"
  required_claims = [
    { key = "repository", value = "GITHUB_ACCOUNT/GITHUB_REPOSITORY" },
    { key = "workflow",   value = "oke-oidc" },
    { key = "ref",        value = "refs/heads/main" },
  ]
}
```

## Cluster Add-ons

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `cluster_addons` | Map of cluster addons to enable. Each addon supports `remove_addon_resources_on_delete`, `override_existing`, and `configurations`. | any | `{}` |
| `cluster_addons_to_remove` | Map of cluster addons to remove. Each entry supports `remove_k8s_resources`. | any | `{}` |

Example:

```hcl
cluster_addons = {
  "CertManager" = {
    remove_addon_resources_on_delete = true
    override_existing                = true
    configurations = [
      { key = "numOfReplicas", value = "1" }
    ]
  }
  "NvidiaGpuPlugin" = {
    remove_addon_resources_on_delete = true
  }
}

cluster_addons_to_remove = {
  Flannel = { remove_k8s_resources = true }
}
```

## Workers

Relevant diagrams:
- [Public workers topology](./diagrams.md#public-workers-topology)
- [Private workers topology](./diagrams.md#private-workers-topology)

### Default Pool Configuration

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `cluster_id` | Existing OKE cluster OCID. Required when `create_cluster = false`. | OCID string | `null` |
| `cluster_ca_cert` | Base64+PEM-encoded cluster CA certificate. Required when `create_cluster = false`. | string | `null` |
| `cluster_dns` | Cluster DNS resolver IP address. Required when `create_cluster = false`. | string | `null` |
| `worker_pools` | Map of worker pool definitions. Key is the pool name, value is the pool configuration. | any | `{}` |
| `worker_pool_mode` | Default management mode for worker pools. | `"node-pool"` / `"virtual-node-pool"` / `"instance"` / `"instance-pool"` / `"cluster-network"` / `"compute-cluster"` | `"node-pool"` |
| `worker_pool_size` | Default size for worker pools. | number | `0` |
| `worker_compute_clusters` | Shared compute cluster definitions for use by multiple pools. | map(any) | `{}` |

### Worker Pool Defaults

These parameters set defaults for all worker pools. Individual pools can override these.

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `worker_is_public` | Provision workers with public IPs. | `true` / `false` | `false` |
| `worker_nsg_ids` | Additional NSG IDs for all worker nodes. | list(string) | `[]` |
| `pod_nsg_ids` | Additional NSG IDs for pods (NPN CNI). | list(string) | `[]` |
| `kubeproxy_mode` | Kube-proxy mode. | `"iptables"` / `"ipvs"` | `"iptables"` |
| `worker_block_volume_type` | Block volume attachment type for self-managed workers. | `"paravirtualized"` / `"iscsi"` | `"paravirtualized"` |
| `worker_node_labels` | Default Kubernetes node labels. | map(string) | `{}` |
| `worker_node_metadata` | Additional worker node metadata. | map(string) | `{}` |
| `worker_image_id` | Default image OCID for worker pools. | OCID string | `null` |
| `worker_image_type` | Default image type. `"oke"` uses OKE Oracle Linux images. | `"oke"` / `"custom"` / `"platform"` | `"oke"` |
| `worker_image_os` | Default OS for platform/OKE images. | string | `"Oracle Linux"` |
| `worker_image_os_version` | Default OS version for platform/OKE images. | string | `"8"` |
| `worker_shape` | Default shape for worker instances. | map(any) | `{shape = "VM.Standard.E4.Flex", ocpus = 2, memory = 16, boot_volume_size = 50, boot_volume_vpus_per_gb = 10}` |
| `worker_capacity_reservation_id` | Capacity reservation OCID for worker instances. | OCID string | `null` |
| `worker_preemptible_config` | Preemptible compute configuration. | map(any) | `{}` |
| `worker_cloud_init` | Default cloud-init MIME parts for all pools. | list(map(string)) | `[]` |
| `worker_disable_default_cloud_init` | Disable the default OKE cloud-init. | `true` / `false` | `false` |
| `worker_volume_kms_key_id` | KMS key OCID for boot volume encryption. | OCID string | `null` |
| `worker_pv_transit_encryption` | Enable in-transit encryption for paravirtualized volumes. | `true` / `false` | `false` |
| `worker_legacy_imds_endpoints_disabled` | Disable IMDSv1 endpoint on workers. | `true` / `false` | `false` |
| `max_pods_per_node` | Maximum pods per node (1-110). Only applies with NPN CNI. | number | `31` |
| `platform_config` | Platform configuration for self-managed pools (shielded instances). | object | `null` |
| `agent_config` | Management agent configuration for self-managed pools. | object | `null` |
| `allow_short_container_image_names` | Allow short container image names without full registry path. Requires Kubernetes >= 1.34.0. | `true` / `false` | `false` |

### Worker Pool Entry Configuration

Each entry in the `worker_pools` map supports the following attributes:

| Attribute | Description | Values |
|-----------|-------------|--------|
| `mode` | Worker management mode. Overrides `worker_pool_mode`. | `"node-pool"` / `"virtual-node-pool"` / `"instance"` / `"instance-pool"` / `"cluster-network"` / `"compute-cluster"` |
| `size` | Number of nodes in the pool. | number |
| `shape` | Instance shape name. | string |
| `ocpus` | Number of OCPUs (Flex shapes). | number |
| `memory` | Memory in GB (Flex shapes). | number |
| `boot_volume_size` | Boot volume size in GB. | number |
| `boot_volume_vpus_per_gb` | Boot volume performance (10/20/30-120). Self-managed modes only. | number |
| `description` | Pool description. | string |
| `create` | Whether to create this pool. | `true` / `false` |
| `image_type` | Image type for this pool. | `"oke"` / `"custom"` / `"platform"` |
| `image_id` | Custom image OCID. | OCID string |
| `os` | OS name. | string |
| `os_version` | OS version. | string |
| `node_labels` | Kubernetes node labels. | map(string) |
| `subnet_id` | Custom subnet OCID for this pool. | OCID string |
| `pod_subnet_id` | Custom pod subnet OCID (NPN CNI). | OCID string |
| `nsg_ids` | Additional NSG IDs for this pool. | list(string) |
| `pod_nsg_ids` | Additional pod NSG IDs for this pool (NPN CNI). | list(string) |
| `assign_public_ip` | Assign a public IP to nodes. | `true` / `false` |
| `cloud_init` | Pool-specific cloud-init MIME parts. | list(map(string)) |
| `secondary_vnics` | Secondary VNIC configurations. | map(any) |
| `autoscale` | Enable cluster autoscaler for this pool. | `true` / `false` |
| `min_size` | Minimum pool size for autoscaling. | number |
| `max_size` | Maximum pool size for autoscaling. | number |
| `allow_autoscaler` | Allow cluster autoscaler to manage this pool. | `true` / `false` |
| `ignore_initial_pool_size` | Ignore initial pool size when autoscaling. | `true` / `false` |
| `drain` | Mark pool for draining (disables scheduling, drains through operator). | `true` / `false` |
| `placement_ads` | List of AD numbers for placement. | list(number) |
| `compute_cluster` | Name of a shared compute cluster (compute-cluster mode). | string |
| `instance_ids` | Instance IDs in compute cluster. | list(string) |
| `platform_config` | Platform configuration (shielded instances). | object |
| `agent_config` | Management agent configuration. | object |
| `burst` | CPU bursting configuration for Flex shapes. | `"BASELINE_1_8"` / `"BASELINE_1_2"` |
| `node_cycling_enabled` | Enable node cycling for updates. | `true` / `false` |
| `node_cycling_max_surge` | Max surge during cycling (percentage or number). | string |
| `node_cycling_max_unavailable` | Max unavailable during cycling. | number |
| `node_cycling_mode` | Cycling mode. | `["instance"]` / `["boot_volume"]` |
| `eviction_grace_duration` | Grace duration for eviction in seconds. | number |
| `is_force_delete_after_grace_duration` | Force delete after grace duration. | `true` / `false` |

Basic node pool example:

```hcl
worker_pool_mode = "node-pool"
worker_pool_size = 1

worker_pools = {
  oke-vm-standard = {}
  oke-vm-standard-large = {
    size             = 1
    shape            = "VM.Standard.E4.Flex"
    ocpus            = 8
    memory           = 128
    boot_volume_size = 200
  }
}
```

Autoscaled node pool example:

```hcl
worker_pools = {
  np-autoscaled = {
    size                     = 2
    min_size                 = 1
    max_size                 = 3
    autoscale                = true
    ignore_initial_pool_size = true
  }
}
```

Cluster network (HPC/GPU) example:

```hcl
worker_pools = {
  oke-bm-gpu-rdma = {
    mode          = "cluster-network"
    size          = 1
    shape         = "BM.GPU.B4.8"
    placement_ads = [1]
    image_id      = "ocid1.image..."
    secondary_vnics = {
      "vnic-display-name" = {
        nic_index = 1
        subnet_id = "ocid1.subnet..."
      }
    }
  }
}
```

## Bastion

The bastion instance provides a public SSH entrypoint into the VCN.

See [Bastion access layout](./diagrams.md#bastion-access-layout) for the administrative access path.

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `create_bastion` | Whether to create a bastion host. | `true` / `false` | `true` |
| `bastion_public_ip` | IP address of an existing bastion. Ignored when `create_bastion = true`. | string | `null` |
| `bastion_allowed_cidrs` | List of CIDR blocks allowed SSH access to the bastion. Set to `["0.0.0.0/0"]` to allow from anywhere. | list(string) | `[]` |
| `bastion_availability_domain` | Availability domain number for the bastion. Defaults to first available. | string | `null` |
| `bastion_nsg_ids` | Additional NSG IDs for the bastion. Combined with the created NSG. | list(string) | `[]` |
| `bastion_user` | SSH user for the bastion host. | string | `"opc"` |
| `bastion_image_id` | Custom image OCID for the bastion. Ignored when `bastion_image_type = "platform"`. | OCID string | `null` |
| `bastion_image_type` | Image type for the bastion. | `"platform"` / `"custom"` | `"platform"` |
| `bastion_image_os` | Platform image OS name. | string | `"Oracle Autonomous Linux"` |
| `bastion_image_os_version` | Platform image OS version. | string | `"8"` |
| `bastion_shape` | Shape of the bastion instance. | map(any) | `{shape = "VM.Standard.E4.Flex", ocpus = 1, memory = 4, boot_volume_size = 50, baseline_ocpu_utilization = 100}` |
| `bastion_is_public` | Whether the bastion is provisioned with a public IP. | `true` / `false` | `true` |
| `bastion_upgrade` | Whether to upgrade bastion packages after provisioning. | `true` / `false` | `false` |
| `bastion_await_cloudinit` | Block Terraform until cloud-init completes on the bastion. | `true` / `false` | `true` |
| `bastion_volume_kms_key_id` | KMS key OCID for bastion boot volume encryption. | OCID string | `null` |
| `bastion_legacy_imds_endpoints_disabled` | Disable IMDSv1 endpoint on the bastion. | `true` / `false` | `true` |

Example:

```hcl
create_bastion              = true
bastion_allowed_cidrs       = ["0.0.0.0/0"]
bastion_image_type          = "platform"
bastion_upgrade             = false
bastion_user                = "opc"

bastion_shape = {
  shape                     = "VM.Standard.E4.Flex"
  ocpus                     = 1
  memory                    = 4
  boot_volume_size          = 50
  baseline_ocpu_utilization = 100
}
```

## Operator

The operator instance provides an environment within the VCN from which the OKE cluster can be managed. It comes pre-installed with kubectl, Helm, and optional tools.

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `create_operator` | Whether to create an operator host. | `true` / `false` | `true` |
| `operator_availability_domain` | Availability domain for the operator. Defaults to first available. | string | `null` |
| `operator_cloud_init` | Cloud-init MIME parts for custom operator initialization. | list(map(string)) | `[]` |
| `operator_nsg_ids` | Additional NSG IDs for the operator. | list(string) | `[]` |
| `operator_user` | SSH user for the operator host. | string | `"opc"` |
| `operator_image_id` | Custom image OCID for the operator. Ignored when `operator_image_type = "platform"`. | OCID string | `null` |
| `operator_image_os` | Platform image OS name. | string | `"Oracle Linux"` |
| `operator_image_os_version` | Platform image OS version. | string | `"8"` |
| `operator_image_type` | Image type for the operator. | `"platform"` / `"custom"` | `"platform"` |
| `operator_install_helm` | Whether to install Helm on the operator. | `true` / `false` | `true` |
| `operator_install_helm_from_repo` | Install Helm from the package repository. | `true` / `false` | `false` |
| `operator_install_oci_cli_from_repo` | Install OCI CLI from the package repository. | `true` / `false` | `false` |
| `operator_install_istioctl` | Whether to install istioctl on the operator. | `true` / `false` | `false` |
| `operator_install_k8sgpt` | Whether to install k8sgpt on the operator. | `true` / `false` | `false` |
| `operator_install_k9s` | Whether to install k9s on the operator. | `true` / `false` | `false` |
| `operator_install_kubectl_from_repo` | Install kubectl from the package repository. | `true` / `false` | `true` |
| `operator_install_kubectx` | Whether to install kubectx/kubens on the operator. | `true` / `false` | `true` |
| `operator_install_stern` | Whether to install stern on the operator. | `true` / `false` | `false` |
| `operator_shape` | Shape of the operator instance. | map(any) | `{shape = "VM.Standard.E4.Flex", ocpus = 1, memory = 4, boot_volume_size = 50, baseline_ocpu_utilization = 100}` |
| `operator_volume_kms_key_id` | KMS key OCID for operator boot volume encryption. | OCID string | `null` |
| `operator_pv_transit_encryption` | Enable in-transit encryption for paravirtualized volumes. | `true` / `false` | `false` |
| `operator_upgrade` | Whether to upgrade operator packages after provisioning. | `true` / `false` | `false` |
| `operator_private_ip` | IP address of an existing operator. Ignored when `create_operator = true`. | string | `null` |
| `operator_await_cloudinit` | Block Terraform until cloud-init completes on the operator. | `true` / `false` | `true` |
| `operator_legacy_imds_endpoints_disabled` | Disable IMDSv1 endpoint on the operator. | `true` / `false` | `true` |

Example with cloud-init:

```hcl
create_operator     = true
operator_upgrade    = false
operator_user       = "opc"

operator_cloud_init = [
  {
    content      = <<-EOT
    runcmd:
    - echo "Operator cloud_init using cloud-config"
    EOT
    content_type = "text/cloud-config"
  }
]

operator_shape = {
  shape                     = "VM.Standard.E4.Flex"
  ocpus                     = 1
  memory                    = 4
  boot_volume_size          = 50
  baseline_ocpu_utilization = 100
}
```

## Extensions

### Cilium

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `cilium_install` | Whether to install Cilium. | `true` / `false` | `false` |
| `cilium_reapply` | Reapply Cilium Helm release on every Terraform apply. | `true` / `false` | `false` |
| `cilium_namespace` | Kubernetes namespace for Cilium. | string | `"kube-system"` |
| `cilium_helm_version` | Cilium Helm chart version. | string | `"1.16.3"` |
| `cilium_helm_values` | Helm values for Cilium. | any | `{}` |
| `cilium_helm_values_files` | List of Helm values files for Cilium. | list(string) | `[]` |

### Multus

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `multus_install` | Whether to install Multus CNI. | `true` / `false` | `false` |
| `multus_namespace` | Kubernetes namespace for Multus. | string | `"network"` |
| `multus_daemonset_url` | URL to the Multus daemonset manifest. Determined automatically by default. | string | `null` |
| `multus_version` | Multus version. | string | `"3.9.3"` |

### SR-IOV Device Plugin

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `sriov_device_plugin_install` | Whether to install the SR-IOV device plugin. | `true` / `false` | `false` |
| `sriov_device_plugin_namespace` | Kubernetes namespace. | string | `"network"` |
| `sriov_device_plugin_daemonset_url` | URL to the daemonset manifest. Determined automatically by default. | string | `null` |
| `sriov_device_plugin_version` | SR-IOV device plugin version. | string | `"master"` |

### SR-IOV CNI Plugin

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `sriov_cni_plugin_install` | Whether to install the SR-IOV CNI plugin. | `true` / `false` | `false` |
| `sriov_cni_plugin_namespace` | Kubernetes namespace. | string | `"network"` |
| `sriov_cni_plugin_daemonset_url` | URL to the daemonset manifest. Determined automatically by default. | string | `null` |
| `sriov_cni_plugin_version` | SR-IOV CNI plugin version. | string | `"master"` |

### RDMA CNI Plugin

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `rdma_cni_plugin_install` | Whether to install the RDMA CNI plugin. | `true` / `false` | `false` |
| `rdma_cni_plugin_namespace` | Kubernetes namespace. | string | `"network"` |
| `rdma_cni_plugin_daemonset_url` | URL to the daemonset manifest. Determined automatically by default. | string | `null` |
| `rdma_cni_plugin_version` | RDMA CNI plugin version. | string | `"master"` |

### Whereabouts

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `whereabouts_install` | Whether to install Whereabouts IPAM. | `true` / `false` | `false` |
| `whereabouts_namespace` | Kubernetes namespace. | string | `"default"` |
| `whereabouts_daemonset_url` | URL to the daemonset manifest. Determined automatically by default. | string | `null` |
| `whereabouts_version` | Whereabouts version. | string | `"master"` |

### Metrics Server

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `metrics_server_install` | Whether to install Metrics Server. | `true` / `false` | `false` |
| `metrics_server_namespace` | Kubernetes namespace. | string | `"metrics"` |
| `metrics_server_helm_version` | Helm chart version. | string | `"3.8.3"` |
| `metrics_server_helm_values` | Helm values. | map(string) | `{}` |
| `metrics_server_helm_values_files` | List of Helm values files. | list(string) | `[]` |

### Cluster Autoscaler

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `cluster_autoscaler_install` | Whether to install the standalone Cluster Autoscaler. | `true` / `false` | `false` |
| `cluster_autoscaler_namespace` | Kubernetes namespace. | string | `"kube-system"` |
| `cluster_autoscaler_helm_version` | Helm chart version. | string | `"9.24.0"` |
| `cluster_autoscaler_helm_values` | Helm values. | map(string) | `{}` |
| `cluster_autoscaler_helm_values_files` | List of Helm values files. | list(string) | `[]` |

### Prometheus

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `prometheus_install` | Whether to install Prometheus. | `true` / `false` | `false` |
| `prometheus_reapply` | Reapply Prometheus Helm release on every apply. | `true` / `false` | `false` |
| `prometheus_namespace` | Kubernetes namespace. | string | `"metrics"` |
| `prometheus_helm_version` | Helm chart version. | string | `"45.2.0"` |
| `prometheus_helm_values` | Helm values. | map(string) | `{}` |
| `prometheus_helm_values_files` | List of Helm values files. | list(string) | `[]` |

### DCGM Exporter

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `dcgm_exporter_install` | Whether to install the DCGM Exporter for GPU metrics. | `true` / `false` | `false` |
| `dcgm_exporter_reapply` | Reapply DCGM Exporter Helm release on every apply. | `true` / `false` | `false` |
| `dcgm_exporter_namespace` | Kubernetes namespace. | string | `"metrics"` |
| `dcgm_exporter_helm_version` | Helm chart version. | string | `"3.1.5"` |
| `dcgm_exporter_helm_values` | Helm values. | map(string) | `{}` |
| `dcgm_exporter_helm_values_files` | List of Helm values files. | list(string) | `[]` |

### Gatekeeper

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `gatekeeper_install` | Whether to install Gatekeeper (OPA). | `true` / `false` | `false` |
| `gatekeeper_namespace` | Kubernetes namespace. | string | `"kube-system"` |
| `gatekeeper_helm_version` | Helm chart version. | string | `"3.11.0"` |
| `gatekeeper_helm_values` | Helm values. | map(string) | `{}` |
| `gatekeeper_helm_values_files` | List of Helm values files. | list(string) | `[]` |

### MPI Operator

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `mpi_operator_install` | Whether to install the MPI Operator. | `true` / `false` | `false` |
| `mpi_operator_namespace` | Kubernetes namespace. | string | `"default"` |
| `mpi_operator_deployment_url` | URL to the deployment manifest. Determined automatically by default. | string | `null` |
| `mpi_operator_version` | MPI Operator version. | string | `"0.4.0"` |

### ArgoCD

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `argocd_install` | Whether to install ArgoCD. | `true` / `false` | `false` |
| `argocd_namespace` | Kubernetes namespace. | string | `"argocd"` |
| `argocd_helm_version` | Helm chart version. | string | `"8.1.2"` |
| `argocd_helm_values` | Helm values. | map(string) | `{}` |
| `argocd_helm_values_files` | List of Helm values files. | list(string) | `[]` |

### Service Accounts

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `create_service_account` | Whether to create Kubernetes service accounts with RBAC. | `true` / `false` | `false` |
| `service_accounts` | Map of service account definitions. Each supports `sa_name`, `sa_namespace`, `sa_cluster_role`, `sa_cluster_role_binding`, `sa_role`, `sa_role_binding`. | map(any) | Seeded with a default `kubeconfigsa` entry |

Example:

```hcl
create_service_account = true

service_accounts = {
  example_cluster_role_binding = {
    sa_name                 = "sa1"
    sa_namespace            = "kube-system"
    sa_cluster_role         = "cluster-admin"
    sa_cluster_role_binding = "sa1-crb"
  }
}
```

## Utilities

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `await_node_readiness` | Block Terraform until nodes are ready. | `"none"` / `"one"` / `"all"` | `"none"` |
| `ocir_email_address` | Email address for OCIR secret. | string | `null` |
| `ocir_secret_id` | OCIR secret OCID from OCI Vault. | OCID string | `null` |
| `ocir_secret_name` | Name of the Kubernetes Docker registry secret. | string | `"ocirsecret"` |
| `ocir_secret_namespace` | Kubernetes namespace for the OCIR secret. | string | `"default"` |
| `ocir_username` | Username for OCIR secret access. | string | `null` |
| `worker_drain_ignore_daemonsets` | Ignore DaemonSet pods when draining workers. | `true` / `false` | `true` |
| `worker_drain_delete_local_data` | Delete local data when draining workers. | `true` / `false` | `true` |
| `worker_drain_timeout_seconds` | Timeout for worker draining in seconds. | number | `900` |

## Tagging

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `freeform_tags` | Freeform tags applied to all resources. | any | `{access = "private", environment = "dev", role = "oke", version = "5"}` |
| `defined_tags` | Defined tags applied to all resources. Requires `use_defined_tags = true`. | any | `{}` |
| `bastion_defined_tags` | Defined tags for bastion resources only. | any | `{}` |
| `bastion_freeform_tags` | Freeform tags for bastion resources only. | any | `{}` |
| `cluster_defined_tags` | Defined tags for cluster resources only. | any | `{}` |
| `cluster_freeform_tags` | Freeform tags for cluster resources only. | any | `{}` |
| `iam_defined_tags` | Defined tags for IAM resources only. | any | `{}` |
| `iam_freeform_tags` | Freeform tags for IAM resources only. | any | `{}` |
| `network_defined_tags` | Defined tags for network resources only. | any | `{}` |
| `network_freeform_tags` | Freeform tags for network resources only. | any | `{}` |
| `operator_defined_tags` | Defined tags for operator resources only. | any | `{}` |
| `operator_freeform_tags` | Freeform tags for operator resources only. | any | `{}` |
| `persistent_volume_defined_tags` | Defined tags for persistent volume resources only. | any | `{}` |
| `persistent_volume_freeform_tags` | Freeform tags for persistent volume resources only. | any | `{}` |
| `service_lb_defined_tags` | Defined tags for service load balancer resources only. | any | `{}` |
| `service_lb_freeform_tags` | Freeform tags for service load balancer resources only. | any | `{}` |
| `workers_defined_tags` | Defined tags for worker resources only. | any | `{}` |
| `workers_freeform_tags` | Freeform tags for worker resources only. | any | `{}` |

## Validation Rules

- `compartment_id` is required.
- Either `ssh_public_key` or `ssh_public_key_path` must be provided when creating bastion or operator.
- `bastion_image_type = "custom"` requires `bastion_image_id`.
- `operator_image_type = "custom"` requires `operator_image_id`.
- `cni_type = "npn"` requires `cluster_type = "enhanced"`.
- `oidc_discovery_enabled = true` requires `cluster_type = "enhanced"`.
- `oidc_token_auth_enabled = true` requires `cluster_type = "enhanced"`.
- `worker_pool_mode = "node-pool"` is the only mode that supports OKE-managed node pools.
- `worker_pool_mode = "cluster-network"` or `"instance-pool"` or `"instance"` are self-managed modes.
- Pods CIDR must not overlap with VCN, worker, or load balancer subnets.
- Services CIDR must not overlap with the VCN CIDR.

## Outputs

| Output | Description |
|--------|-------------|
| `state_id` | Generated state identifier. |
| `cluster_id` | OKE cluster OCID. |
| `cluster_endpoints` | Cluster endpoints (public and private). |
| `cluster_oidc_discovery_endpoint` | OIDC discovery endpoint URL. |
| `cluster_kubeconfig` | Kubernetes kubeconfig YAML (requires `output_detail = true`). |
| `cluster_ca_cert` | Base64-encoded cluster CA certificate. |
| `apiserver_private_host` | Private API server hostname. |
| `bastion_id` | Bastion instance OCID. |
| `bastion_public_ip` | Bastion public IP address. |
| `ssh_to_bastion` | SSH command to connect to the bastion. |
| `operator_id` | Operator instance OCID. |
| `operator_private_ip` | Operator private IP address. |
| `ssh_to_operator` | SSH command to connect to the operator (via bastion). |
| `vcn_id` | VCN OCID. |
| `ig_route_table_id` | Internet gateway route table OCID. |
| `nat_route_table_id` | NAT gateway route table OCID. |
| `drg_id` | Dynamic Routing Gateway OCID (when created). |
| `lpg_all_attributes` | Local Peering Gateway attributes. |
| `bastion_subnet_id` | Bastion subnet OCID. |
| `bastion_subnet_cidr` | Bastion subnet CIDR. |
| `operator_subnet_id` | Operator subnet OCID. |
| `operator_subnet_cidr` | Operator subnet CIDR. |
| `control_plane_subnet_id` | Control plane subnet OCID. |
| `control_plane_subnet_cidr` | Control plane subnet CIDR. |
| `worker_subnet_id` | Worker subnet OCID. |
| `worker_subnet_cidr` | Worker subnet CIDR. |
| `pod_subnet_id` | Pod subnet OCID. |
| `pod_subnet_cidr` | Pod subnet CIDR. |
| `int_lb_subnet_id` | Internal load balancer subnet OCID. |
| `int_lb_subnet_cidr` | Internal load balancer subnet CIDR. |
| `pub_lb_subnet_id` | Public load balancer subnet OCID. |
| `pub_lb_subnet_cidr` | Public load balancer subnet CIDR. |
| `fss_subnet_id` | FSS subnet OCID. |
| `fss_subnet_cidr` | FSS subnet CIDR. |
| `bastion_nsg_id` | Bastion NSG OCID. |
| `operator_nsg_id` | Operator NSG OCID. |
| `control_plane_nsg_id` | Control plane NSG OCID. |
| `int_lb_nsg_id` | Internal load balancer NSG OCID. |
| `pub_lb_nsg_id` | Public load balancer NSG OCID. |
| `worker_nsg_id` | Worker NSG OCID. |
| `pod_nsg_id` | Pod NSG OCID. |
| `fss_nsg_id` | FSS NSG OCID. |
| `network_security_rules` | Map of all NSG security rules (requires `output_detail = true`). |
| `availability_domains` | Map of availability domains. |
| `dynamic_group_ids` | IAM dynamic group OCIDs. |
| `policy_statements` | IAM policy statements. |
| `worker_pools` | Worker pool details. |
| `worker_instances` | Worker instance details. |
| `worker_pool_ids` | Worker pool OCIDs. |
| `worker_pool_ips` | Worker pool IP addresses. |


================================================
FILE: examples/bastion/README.md
================================================
# Bastion Example

Enables the bastion host with a public IP for SSH access into the VCN.

## Usage

Copy `vars-bastion.auto.tfvars` to your root module and adjust the values as needed.


================================================
FILE: examples/cluster/README.md
================================================
# Cluster Examples

Example configurations for OKE cluster creation:

| File | Description |
|------|-------------|
| `vars-cluster-basic.auto.tfvars` | Basic cluster with default settings |
| `vars-cluster-enhanced.auto.tfvars` | Enhanced cluster with additional features |
| `vars-cluster-oidc-discovery.auto.tfvars` | Cluster with OIDC discovery enabled |
| `vars-cluster-oidc-auth-single.auto.tfvars` | Cluster with single OIDC token authentication |
| `vars-cluster-oidc-auth-multiple.auto.tfvars` | Cluster with multiple OIDC token authentication configurations |

## Usage

Copy the desired `.auto.tfvars` file(s) to your root module and adjust the values as needed.


================================================
FILE: examples/cluster-addons/README.md
================================================
# Cluster Add-ons Example

Example configuration for enabling and configuring OKE cluster add-ons such as CertManager and NvidiaGpuPlugin.

## Usage

Copy `vars-cluster-addons.auto.tfvars` to your root module and adjust the values as needed.


================================================
FILE: examples/extensions/README.md
================================================
# Extension Examples

Example configurations for deploying Kubernetes extensions:

| File | Extension | Description |
|------|-----------|-------------|
| `vars-extensions-argocd.auto.tfvars` | ArgoCD | GitOps continuous delivery |
| `vars-extensions-cilium.auto.tfvars` | Cilium | eBPF-based networking and security |
| `vars-extensions-cluster-autoscaler.auto.tfvars` | Cluster Autoscaler | Automatic node pool scaling |
| `vars-extensions-dcgm-exporter.auto.tfvars` | DCGM Exporter | GPU metrics for NVIDIA GPUs |
| `vars-extensions-gatekeeper.auto.tfvars` | Gatekeeper | OPA policy enforcement |
| `vars-extensions-metrics-server.auto.tfvars` | Metrics Server | Kubernetes metrics API |
| `vars-extensions-mpi-operator.auto.tfvars` | MPI Operator | MPI/NCCL distributed training jobs |
| `vars-extensions-multus.auto.tfvars` | Multus | Multi-network pod interfaces |
| `vars-extensions-prometheus.auto.tfvars` | Prometheus | Monitoring and alerting |
| `vars-extensions-rdma-cni.auto.tfvars` | RDMA CNI | RDMA network connections |
| `vars-extensions-service-account.auto.tfvars` | Service Accounts | Kubernetes service accounts with RBAC |
| `vars-extensions-sriov-cni.auto.tfvars` | SR-IOV CNI | SR-IOV network connections |
| `vars-extensions-sriov-device.auto.tfvars` | SR-IOV Device Plugin | SR-IOV network device advertisement |
| `vars-extensions-whereabouts.auto.tfvars` | Whereabouts | IP address management for Multus |

## Usage

Copy the desired `.auto.tfvars` file(s) to your root module and adjust the values as needed.


================================================
FILE: examples/iam/README.md
================================================
# IAM Examples

Example configurations for IAM resources:

| File | Description |
|------|-------------|
| `vars-iam-policies.auto.tfvars` | IAM dynamic groups and policies |
| `vars-iam-tags.auto.tfvars` | IAM tag namespaces and defined tags |

## Usage

Copy the desired `.auto.tfvars` file(s) to your root module and adjust the values as needed.


================================================
FILE: examples/istio-mc/README.md
================================================
# Multi-region service mesh with Istio and OKE

## Assumptions

1. A pair of OKE clusters in 2 different OCI regions will be used.
2. The OKE clusters will use private control planes.
3. The topology model used is [Multi-Primary on different networks](https://istio.io/latest/docs/setup/install/multicluster/multi-primary_multi-network/).

![Multi-primary on multiple networks](docs/assets/multi-primary%20multi-networks.png)
4. This example uses self-signed certificates.

## Create the OKE Clusters

1. Copy the terraform.tfvars.example to terraform.tfvars and provide the necessary values as detailed in steps 2-6.

2. Configure the provider parameters:

```
# provider
api_fingerprint = ""

api_private_key_path = "~/.oci/oci_rsa.pem"

home_region = "ashburn"

tenancy_id = "ocid1.tenancy.oc1.."

user_id = "ocid1.user.oc1.."

compartment_id = "ocid1.compartment.oc1.."
```

3. Configure an ssh key pair:

```
# ssh
ssh_private_key_path = "~/.ssh/id_rsa"
ssh_public_key_path  = "~/.ssh/id_rsa.pub"
```

4. Configure your clusters' regions.

```
# clusters
clusters = {
  c1 = { region = "sydney", vcn = "10.1.0.0/16", pods = "10.201.0.0/16", services = "10.101.0.0/16", enabled = true }
  c2 = { region = "melbourne", vcn = "10.2.0.0/16", pods = "10.202.0.0/16", services = "10.102.0.0/16", enabled = true }
}
```

5. Configure additional parameters if necessary:

```
kubernetes_version = "v1.32.1"

cluster_type = "basic"

oke_control_plane = "private"
```

6. Configure your node pools:

```
nodepools = {
  np1 = {
    shape            = "VM.Standard.E4.Flex",
    ocpus            = 2,
    memory           = 64,
    size             = 2,
    boot_volume_size = 150,
  }
}
```

7. Run terraform to create your clusters:

```
terraform apply --auto-approve
```

8. Once the Dynamic Routing Gateways (DRGs) and Remote Peering Connections (RPCs) have been created, use the OCI console to establish a connection between them.

## Install Istio

1. Terraform will output an ssh convenience command. Use it to ssh to the operator host:

```
ssh_to_operator = "ssh -o ProxyCommand='ssh -W %h:%p -i ~/.ssh/id_rsa opc@<bastion_ip>' -i ~/.ssh/id_rsa opc@<operator_ip>"
```

2. Verify connectivity to both clusters:

```
for cluster in c1 c2; do
  ktx $cluster
  k get nodes
done
```

3. Generate certs for each cluster:

```
export ISTIO_HOME=/home/opc/istio-1.20.2
cd $ISTIO_HOME/tools/certs 
make -f Makefile.selfsigned.mk c1-cacerts
make -f Makefile.selfsigned.mk c2-cacerts
```

4. Create and label istio-system namespace in each cluster:

```
for cluster in c1 c2; do
  ktx $cluster
  k create ns istio-system
  k label namespace istio-system topology.istio.io/network=$cluster
done
```

5. Create a secret containing the certificates in istio-system namespace for both clusters:

```
for cluster in c1 c2; do
  ktx $cluster
  kubectl create secret generic cacerts -n istio-system \
      --from-file=$cluster/ca-cert.pem \
      --from-file=$cluster/ca-key.pem \
      --from-file=$cluster/root-cert.pem \
      --from-file=$cluster/cert-chain.pem
done
```

6. Install Istio in both clusters:

```
for cluster in c1 c2; do
  ktx $cluster
  istioctl install --set profile=default -f $HOME/$cluster.yaml
done
```

7. Verify the Istio installation in both clusters:

```
for cluster in c1 c2; do
  ktx $cluster
  istioctl verify-install
done
```

8. Check if the load balancers have been properly provisioned:

```
for cluster in c1 c2; do
  ktx $cluster
  k -n istio-system get svc
done
```

9. Check if Istio pods are running:

```
for cluster in c1 c2; do
  ktx $cluster
  k -n istio-system get pods
done
```

10. Create an Gateway to expose all services through the eastwest ingress gateway:

```
cd $ISTIO_HOME
for cluster in c1 c2; do
  ktx $cluster
  k apply -f samples/multicluster/expose-services.yaml
done
```

11. Set the environment variables to verify multi-cluster connectivity:
```
export CTX_CLUSTER1=c1
export CTX_CLUSTER2=c2
```

12. Enable endpoint discovery in each cluster by creating a remote secret:

```
istioctl create-remote-secret \
  --context="${CTX_CLUSTER1}" \
  --name="${CTX_CLUSTER1}" | \
  kubectl apply -f - --context="${CTX_CLUSTER2}"


 istioctl create-remote-secret \
  --context="${CTX_CLUSTER2}" \
  --name="${CTX_CLUSTER2}" | \
  kubectl apply -f - --context="${CTX_CLUSTER1}"
```

## Verify cross-cluster connectivity

1. Deploy the HelloWorld Service in both clusters:

```
for cluster in c1 c2; do
  kubectl create --context="${cluster}" namespace sample
  kubectl label --context="${cluster}" namespace sample istio-injection=enabled
  kubectl apply --context="${cluster}" -f samples/helloworld/helloworld.yaml -l service=helloworld -n sample
done
```

2. Deploy v1 to cluster c1:

```
kubectl apply --context="${CTX_CLUSTER1}" \
    -f samples/helloworld/helloworld.yaml \
    -l version=v1 -n sample

kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
```

3. Deploy v2 to cluster c2:

```
kubectl apply --context="${CTX_CLUSTER2}" \
    -f samples/helloworld/helloworld.yaml \
    -l version=v2 -n sample

kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
```

4. Deploy Sleep client pod in both clusters:

```
kubectl apply --context="${CTX_CLUSTER1}" \
    -f samples/sleep/sleep.yaml -n sample
kubectl apply --context="${CTX_CLUSTER2}" \
    -f samples/sleep/sleep.yaml -n sample
```

5. Generate traffic from c1. The response should alternate between c1 (v1) and c2 (v2) regions:

```
for i in $(seq 1 100); do
kubectl exec --context="${CTX_CLUSTER1}" -n sample -c sleep \
    "$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
    app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    -- curl -sS helloworld.sample:5000/hello
done
```

6. Generate traffic from c2. The response should alternate between c1 (v1) and c2 (v2) regions:

```
for i in $(seq 1 100); do
kubectl exec --context="${CTX_CLUSTER2}" -n sample -c sleep \
    "$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
    app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    -- curl -sS helloworld.sample:5000/hello
done
```

7. Cross-cluster connectivity has been verified.



================================================
FILE: examples/istio-mc/c1.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

module "c1" {

  source  = "oracle-terraform-modules/oke/oci"
  version = "5.2.2"

  count = lookup(lookup(var.clusters, "c1"), "enabled") ? 1 : 0

  home_region = lookup(local.regions, var.home_region)

  region = lookup(local.regions, lookup(lookup(var.clusters, "c1"), "region"))

  tenancy_id = var.tenancy_id

  # general oci parameters
  compartment_id = var.compartment_id

  # ssh keys
  ssh_private_key_path = var.ssh_private_key_path
  ssh_public_key_path  = var.ssh_public_key_path

  # networking
  create_drg       = var.oke_control_plane == "private" ? true : false
  drg_display_name = "c1-drg"

  remote_peering_connections = var.oke_control_plane == "private" ? {
    for k, v in var.clusters : "rpc-to-${k}" => {} if k != "c1"
  } : {}

  nat_gateway_route_rules = var.oke_control_plane == "private" ? [
    for k, v in var.clusters :
    {
      destination       = lookup(v, "vcn")
      destination_type  = "CIDR_BLOCK"
      network_entity_id = "drg"
      description       = "Routing to allow connectivity to ${title(k)} cluster"
    } if k != "c1"
  ] : []

  vcn_cidrs     = [lookup(lookup(var.clusters, "c1"), "vcn")]
  vcn_dns_label = "c1"
  vcn_name      = "c1"

  #subnets
  subnets = {
    bastion  = { newbits = 13, netnum = 0, dns_label = "bastion" }
    operator = { newbits = 13, netnum = 1, dns_label = "operator" }
    cp       = { newbits = 13, netnum = 2, dns_label = "cp" }
    int_lb   = { newbits = 11, netnum = 16, dns_label = "ilb" }
    pub_lb   = { newbits = 11, netnum = 17, dns_label = "plb" }
    workers  = { newbits = 2, netnum = 1, dns_label = "workers" }
  }

  # bastion host
  create_bastion        = true
  bastion_allowed_cidrs = ["0.0.0.0/0"]
  bastion_upgrade       = false

  # operator host
  create_operator            = true
  operator_upgrade           = false
  create_iam_resources       = true
  create_iam_operator_policy = "always"
  operator_install_k9s       = true

  # oke cluster options
  cluster_name                = "c1"
  cluster_type                = var.cluster_type
  cni_type                    = var.preferred_cni
  control_plane_is_public     = var.oke_control_plane == "public"
  control_plane_allowed_cidrs = [local.anywhere]
  kubernetes_version          = var.kubernetes_version
  pods_cidr                   = lookup(lookup(var.clusters, "c1"), "pods")
  services_cidr               = lookup(lookup(var.clusters, "c1"), "services")


  # node pools
  allow_worker_ssh_access = true
  kubeproxy_mode          = "iptables"
  worker_pool_mode        = "node-pool"
  worker_pools            = var.nodepools
  worker_cloud_init       = local.worker_cloud_init
  worker_image_type       = "oke"

  # oke load balancers
  load_balancers          = "both"
  preferred_load_balancer = "public"

  allow_rules_internal_lb = merge({
    for p in local.service_mesh_ports :
    format("Allow ingress to port %v from cluster c2 for Istio", p) => {
      protocol    = local.tcp_protocol, port = p, source = lookup(lookup(var.clusters, "c2"), "vcn"),
      source_type = local.rule_type_cidr,
    }
    },
    {
      for c in var.clusters : format("Allow TCP ingress from cluster %v for Cilium clustermesh", lookup(c, "name")) => {
        protocol = local.tcp_protocol, port = 2379, source = lookup(c, "vcn"), source_type = local.rule_type_cidr,
      } if lookup(c, "name") != "c1"
    },
    {
      for c in var.clusters :
      format("Allow UDP ingress from cluster %v for cross-cluster DNS lookup via NLB for Coherence WKA", lookup(c, "name"))
      => {
        protocol = local.udp_protocol, port = 53, source = lookup(c, "vcn"), source_type = local.rule_type_cidr,
      } if lookup(c, "name") != "c1"
    },
  )

  allow_rules_public_lb = merge({
    for p in local.public_lb_allowed_ports :
    format("Allow ingress to port %v", p) => {
      protocol = local.tcp_protocol, port = p, source = "0.0.0.0/0", source_type = local.rule_type_cidr,
    }
    },
  )

  allow_rules_workers = merge(
    {
      for c in var.clusters :
      format("Allow UDP ingress to workers from cluster %v for default VXLAN", lookup(c, "name")) => {
        protocol = local.udp_protocol, port = 8472, source = lookup(c, "vcn"), source_type = local.rule_type_cidr,
      } if lookup(c, "name") != "c1"
    },
  )

  user_id = var.user_id

  providers = {
    oci      = oci.c1
    oci.home = oci.home
  }
}


================================================
FILE: examples/istio-mc/c2.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

module "c2" {

  source  = "oracle-terraform-modules/oke/oci"
  version = "5.2.2"

  count = lookup(lookup(var.clusters, "c2"), "enabled") ? 1 : 0

  home_region = lookup(local.regions, var.home_region)

  region = lookup(local.regions, lookup(lookup(var.clusters, "c2"), "region"))

  tenancy_id = var.tenancy_id

  # general oci parameters
  compartment_id = var.compartment_id

  # ssh keys
  ssh_private_key_path = var.ssh_private_key_path
  ssh_public_key_path  = var.ssh_public_key_path

  # networking
  create_drg       = var.oke_control_plane == "private" ? true : false
  drg_display_name = "c2"

  remote_peering_connections = var.oke_control_plane == "private" ? {
    for k, v in var.clusters : "rpc-to-${k}" => {} if k != "c2"
  } : {}

  nat_gateway_route_rules = var.oke_control_plane == "private" ? [
    for k, v in var.clusters :
    {
      destination       = lookup(v, "vcn")
      destination_type  = "CIDR_BLOCK"
      network_entity_id = "drg"
      description       = "Routing to allow connectivity to ${title(k)} cluster"
    } if k != "c2"
  ] : []

  vcn_cidrs     = [lookup(lookup(var.clusters, "c2"), "vcn")]
  vcn_dns_label = "c2"
  vcn_name      = "c2"

  #subnets
  subnets = {
    cp      = { newbits = 13, netnum = 2, dns_label = "cp" }
    int_lb  = { newbits = 11, netnum = 16, dns_label = "ilb" }
    pub_lb  = { newbits = 11, netnum = 17, dns_label = "plb" }
    workers = { newbits = 2, netnum = 1, dns_label = "workers" }
  }

  # bastion host
  create_bastion        = false
  bastion_allowed_cidrs = ["0.0.0.0/0"]
  bastion_upgrade       = false

  # operator host
  create_operator            = false
  operator_upgrade           = false
  create_iam_resources       = true
  create_iam_operator_policy = "always"
  operator_install_k9s       = true

  # oke cluster options
  cluster_name                = "c2"
  cluster_type                = var.cluster_type
  cni_type                    = var.preferred_cni
  control_plane_is_public     = var.oke_control_plane == "public"
  control_plane_allowed_cidrs = [local.anywhere]
  kubernetes_version          = var.kubernetes_version
  pods_cidr                   = lookup(lookup(var.clusters, "c2"), "pods")
  services_cidr               = lookup(lookup(var.clusters, "c2"), "services")


  # node pools
  kubeproxy_mode    = "iptables"
  worker_pool_mode  = "node-pool"
  worker_pools      = var.nodepools
  worker_cloud_init = local.worker_cloud_init
  worker_image_type = "oke"

  # oke load balancers
  load_balancers          = "both"
  preferred_load_balancer = "public"

  allow_rules_internal_lb = merge({
    for p in local.service_mesh_ports :
    format("Allow ingress to port %v  from cluster c1", p) => {
      protocol    = local.tcp_protocol, port = p, source = lookup(lookup(var.clusters, "c1"), "vcn"),
      source_type = local.rule_type_cidr,
    }
    },
    {
      for c in var.clusters : format("Allow TCP ingress from cluster %v for Cilium clustermesh", lookup(c, "name")) => {
        protocol = local.tcp_protocol, port = 2379, source = lookup(c, "vcn"), source_type = local.rule_type_cidr,
      } if lookup(c, "name") != "c2"
    },
    {
      for c in var.clusters :
      format("Allow UDP ingress from cluster %v for cross-cluster DNS lookup via NLB for Coherence WKA", lookup(c, "name"))
      => {
        protocol = local.udp_protocol, port = 53, source = lookup(c, "vcn"), source_type = local.rule_type_cidr,
      } if lookup(c, "name") != "c2"
    },
  )

  allow_rules_public_lb = merge({
    for p in local.public_lb_allowed_ports :
    format("Allow ingress to port %v", p) => {
      protocol = local.tcp_protocol, port = p, source = "0.0.0.0/0", source_type = local.rule_type_cidr,
    }
    },
  )

  allow_rules_workers = merge(
    {
      for c in var.clusters :
      format("Allow UDP ingress to workers from cluster %v for default VXLAN", lookup(c, "name")) => {
        protocol = local.udp_protocol, port = 8472, source = lookup(c, "vcn"), source_type = local.rule_type_cidr
      } if lookup(c, "name") != "c2"
    },
  )

  user_id = var.user_id

  providers = {
    oci      = oci.c2
    oci.home = oci.home
  }
}


================================================
FILE: examples/istio-mc/contexts.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

resource "null_resource" "tools" {
  depends_on = [module.c1]

  connection {
    host        = local.operator_ip
    private_key = file(var.ssh_private_key_path)
    timeout     = "40m"
    type        = "ssh"
    user        = "opc"

    bastion_host        = local.bastion_ip
    bastion_user        = "opc"
    bastion_private_key = file(var.ssh_private_key_path)
  }

  provisioner "file" {
    content     = local.token_helper_template
    destination = "/home/opc/token_helper.sh"
  }

  provisioner "file" {
    content     = local.istioctl_template
    destination = "/home/opc/install_istioctl.sh"
  }

  provisioner "remote-exec" {
    inline = [
      "mkdir /home/opc/bin; mv token_helper.sh /home/opc/bin; chmod +x /home/opc/bin/token_helper.sh",
      "if [ -f \"$HOME/install_istioctl.sh\" ]; then bash \"$HOME/install_istioctl.sh\";fi",
    ]
  }
}


resource "null_resource" "set_contexts" {
  depends_on = [module.c1, module.c2]
  for_each   = local.all_cluster_ids
  connection {
    host        = local.operator_ip
    private_key = file(var.ssh_private_key_path)
    timeout     = "40m"
    type        = "ssh"
    user        = "opc"

    bastion_host        = local.bastion_ip
    bastion_user        = "opc"
    bastion_private_key = file(var.ssh_private_key_path)
  }

  provisioner "file" {
    content     = lookup(local.kubeconfig_templates, each.key)
    destination = "/home/opc/generate_kubeconfig_${each.key}.sh"
  }

  provisioner "file" {
    content     = lookup(local.set_credentials_templates, each.key)
    destination = "/home/opc/kubeconfig_set_credentials_${each.key}.sh"
  }

  provisioner "file" {
    content     = lookup(local.set_alias_templates, each.key)
    destination = "/home/opc/set_alias_${each.key}.sh"
  }

  provisioner "remote-exec" {
    inline = [
      "if [ -f \"$HOME/generate_kubeconfig_${each.key}.sh\" ]; then bash \"$HOME/generate_kubeconfig_${each.key}.sh\";fi",
      "if [ -f \"$HOME/kubeconfig_set_credentials_${each.key}.sh\" ]; then bash \"$HOME/kubeconfig_set_credentials_${each.key}.sh\";fi",
      "if [ -f \"$HOME/set_alias_${each.key}.sh\" ]; then bash \"$HOME/set_alias_${each.key}.sh\";fi",
    ]
  }

  triggers = {
    clusters = length(var.clusters)
  }

  lifecycle {
    create_before_destroy = true
  }

}


================================================
FILE: examples/istio-mc/istio.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

locals {
  istio_c1 = templatefile("${path.module}/resources/istio.template.yaml",
    {
      mesh_id          = var.istio_mesh_id
      cluster          = "c1"
      mesh_network     = "c1"
      pub_nsg_id       = one(element([module.c1[*].pub_lb_nsg_id], 0))
      int_lb_subnet_id = one(element([module.c1[*].int_lb_subnet_id], 0))
      int_nsg_id       = one(element([module.c1[*].int_lb_nsg_id], 0))
    }
  )

  istio_c2 = templatefile("${path.module}/resources/istio.template.yaml",
    {
      mesh_id          = var.istio_mesh_id
      cluster          = "c2"
      mesh_network     = "c2"
      pub_nsg_id       = one(element([module.c2[*].pub_lb_nsg_id], 0))
      int_lb_subnet_id = one(element([module.c2[*].int_lb_subnet_id], 0))
      int_nsg_id       = one(element([module.c2[*].int_lb_nsg_id], 0))
    }
  )
}

resource "null_resource" "istio" {
  depends_on = [module.c1, module.c2]

  connection {
    host        = local.operator_ip
    private_key = file(var.ssh_private_key_path)
    timeout     = "40m"
    type        = "ssh"
    user        = "opc"

    bastion_host        = local.bastion_ip
    bastion_user        = "opc"
    bastion_private_key = file(var.ssh_private_key_path)
  }

  provisioner "file" {
    content     = local.istio_c1
    destination = "/home/opc/c1.yaml"
  }

  provisioner "file" {
    content     = local.istio_c2
    destination = "/home/opc/c2.yaml"
  }
}


================================================
FILE: examples/istio-mc/locals.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

locals {

  all_ports = -1

  # Protocols
  # See https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
  all_protocols = "all"
  icmp_protocol = 1
  tcp_protocol  = 6
  udp_protocol  = 17

  anywhere          = "0.0.0.0/0"
  rule_type_nsg     = "NETWORK_SECURITY_GROUP"
  rule_type_cidr    = "CIDR_BLOCK"
  rule_type_service = "SERVICE_CIDR_BLOCK"

  bastion_ip = one(element([module.c1[*].bastion_public_ip], 0))

  operator_ip = one(element([module.c1[*].operator_private_ip], 0))

  # TODO: check when is 15021 required for public
  public_lb_allowed_ports = [80, 443, 15021]

  # ports required to be opened for inter-cluster communication between for Istio
  service_mesh_ports = [15012, 15017, 15021, 15443]

  regions = {
    # Africa
    johannesburg = "af-johannesburg-1"

    # Asia
    chuncheon = "ap-chuncheon-1"
    hyderabad = "ap-hyderabad-1"
    mumbai    = "ap-mumbai-1"
    osaka     = "ap-osaka-1"
    seoul     = "ap-seoul-1"
    singapore = "ap-singapore-1"
    tokyo     = "ap-tokyo-1"

    # Europe
    amsterdam = "eu-amsterdam-1"
    frankfurt = "eu-frankfurt-1"
    london    = "uk-london-1"
    madrid    = "eu-madrid-1"
    marseille = "eu-marseille-1"
    milan     = "eu-milan-1"
    newport   = "uk-cardiff-1"
    paris     = "eu-paris-1"
    stockholm = "eu-stockholm-1"
    zurich    = "eu-zurich-1"

    # Middle East
    abudhabi  = "me-abudhabi-1"
    dubai     = "me-dubai-1"
    jeddah    = "me-jeddah-1"
    jerusalem = "il-jerusalem-1"

    # Oceania
    melbourne = "ap-melbourne-1"
    sydney    = "ap-sydney-1"


    # South America
    bogota     = "sa-bogota-1"
    santiago   = "sa-santiago-1"
    saupaulo   = "sa-saupaulo-1"
    valparaiso = "sa-valparaiso-1"
    vinhedo    = "sa-vinhedo-1"

    # North America
    ashburn   = "us-ashburn-1"
    chicago   = "us-chicago-1"
    monterrey = "mx-monterrey-1"
    montreal  = "ca-montreal-1"
    phoenix   = "us-phoenix-1"
    queretaro = "mx-queretaro-1"
    sanjose   = "us-sanjose-1"
    toronto   = "ca-toronto-1"

    # US Gov FedRamp
    us-gov-ashburn = "us-langley-1"
    us-gov-phoenix = "us-luke-1"

    # US Gov DISA L5
    us-dod-east  = "us-gov-ashburn-1"
    us-dod-north = "us-gov-chicago-1"
    us-dod-west  = "us-gov-phoenix-1"

    # UK Gov
    uk-gov-south = "uk-gov-london-1"
    uk-gov-west  = "uk-gov-cardiff-1"

    # Australia Gov
    au-gov-cbr = "ap-dcc-canberra-1"

  }

  worker_cloud_init = [
    {
      content      = <<-EOT
    runcmd:
    - 'echo "Kernel module configuration for Istio and worker node initialization"'
    - 'modprobe br_netfilter'
    - 'modprobe nf_nat'
    - 'modprobe xt_REDIRECT'
    - 'modprobe xt_owner'
    - 'modprobe iptable_nat'
    - 'modprobe iptable_mangle'
    - 'modprobe iptable_filter'
    - '/usr/libexec/oci-growfs -y'
    - 'timedatectl set-timezone Australia/Sydney'
    - 'curl --fail -H "Authorization: Bearer Oracle" -L0 http://169.254.169.254/opc/v2/instance/metadata/oke_init_script | base64 --decode >/var/run/oke-init.sh'
    - 'bash -x /var/run/oke-init.sh'
    EOT
      content_type = "text/cloud-config",
    }
  ]
}


================================================
FILE: examples/istio-mc/outputs.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

output "ssh_to_operator" {
  description = "convenient command to ssh to the Admin operator host"
  value       = one(element([module.c1[*].ssh_to_operator], 0))
}

================================================
FILE: examples/istio-mc/providers.tf
================================================
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

provider "oci" {
  fingerprint         = var.api_fingerprint
  private_key_path    = var.api_private_key_path
  region              = lookup(local.regions, var.home_region)
  tenancy_ocid        = var.tenancy_id
  user_ocid           = var.user_id
  alias               = "home"
  ignore_defined_tags = ["Oracle-Tags.CreatedBy", "Oracle-Tags.CreatedOn"]
}

provider "oci" {
  fingerprint         = var.api_fingerprint
  private_key_path    = var.api_private_key_path
  region              = lookup(local.regions, lookup(lookup(var.clusters, "c1"), "region"))
  tenancy_ocid        = var.tenancy_id
  user_ocid           = var.user_id
  alias               = "c1"
  ignore_defined_tags = ["Oracle-Tags.CreatedBy", "Oracle-Tags.CreatedOn"]
}

provider "oci" {
  fingerprint         = var.api_fingerprint
  private_key_path    = var.api_private_key_path
  region              = lookup(local.regions, lookup(lookup(var.clusters, "c2"), "region"))
  tenancy_ocid        = var.tenancy_id
  user_ocid           = var.user_id
  alias               = "c2"
  ignore_defined_tags = ["Oracle-Tags.CreatedBy", "Oracle-Tags.CreatedOn"]
}

================================================
FILE: examples/istio-mc/resources/istio.template.yaml
================================================
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    global:
      meshID: ${mesh_id}
      multiCluster:
        clusterName: ${cluster}
      network: ${mesh_network}
  components:
    egressGateways:
      - name: istio-egressgateway
        enabled: true
    ingressGateways:
      - name: istio-ingressgateway
        enabled: true
        k8s:
          serviceAnnotations:
            service.beta.kubernetes.io/oci-load-balancer-internal: "false"
            service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
            service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "50"
            service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100"
            service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
            oci.oraclecloud.com/oci-network-security-groups: "${pub_nsg_id}"
      - name: istio-eastwestgateway
        enabled: true
        k8s:
          serviceAnnotations:
            service.beta.kubernetes.io/oci-load-balancer-internal: "true"
            service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
            service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "50"
            service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100"
            service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
            service.beta.kubernetes.io/oci-load-balancer-subnet1: "${int_lb_subnet_id}"
            oci.oraclecloud.com/oci-network-security-groups: "${int_nsg_id}"
          env:
          - name: ISTIO_META_REQUESTED_NETWORK_VIEW
            value: ${mesh_network}
          - name: ISTIO_META_ROUTER_MODE
            value: "sni-dnat"
          service:
            ports:
            - name: status-port
              port: 15021
              targetPort: 15021
            - name: tls
              port: 15443
              targetPort: 15443
            - name: tls-istiod
              port: 15012
              targetPort: 15012
            - name: tls-webhook
              port: 15017
              targetPort: 15017
        label:
          app: istio-eastwestgateway
          istio: eastwestgateway
          topology.istio.io/network: ${mesh_network}

================================================
FILE: examples/istio-mc/scripts/cloud-init.sh
================================================
#!/bin/sh

modprobe br_netfilter 
modprobe nf_nat
modprobe xt_REDIRECT
modprobe xt_owner
modprobe iptable_nat
modprobe iptable_mangle
modprobe iptable_filter

/usr/libexec/oci-growfs -y

timedatectl set-timezone Australia/Sydney

'curl --fail -H "Authorization: Bearer Oracle" -L0 http://169.254.169.254/opc/v2/instance/metadata/oke_init_script | base64 --decode >/var/run/oke-init.sh'

bash -x /var/run/oke-init.sh

touch /var/log/oke.done

================================================
FILE: examples/istio-mc/scripts/generate_kubeconfig.template.sh
================================================
#!/usr/bin/bash
# Copyright (c) 2023 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

oci ce cluster create-kubeconfig --cluster-id ${cluster_id} --file $HOME/.kube/config  --region ${region} --token-version 2.0.0 --kube-endpoint ${endpoint}

================================================
FILE: examples/istio-mc/scripts/istioctl.template.sh
================================================
#!/usr/bin/bash
# Copyright (c) 2024 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

echo "Installing istioctl"
curl -L curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${version} TARGET_ARCH=x86_64 sh -

================================================
FILE: examples/istio-mc/scripts/kubeconfig_set_credentials.template.sh
================================================
#!/usr/bin/bash
# Copyright (c) 2023 Oracle Corporation and/or its affiliates.
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl

kubectl config set-credentials "user-${cluster_id_11}" --exec-command="$HOME/bin/token_helper.sh" \
  --exec-arg="ce" \
  --exec-arg="cluster" \
  --exec-arg="generate-token" \
  --exec-arg="--cluster-id" \
  --exec-arg="${cluster_id}" \
  --exec-arg="--region" \
  --exec-arg="${region}"

==============================
Download .txt
gitextract_s2i9ymxq/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug_Report.md
│   │   ├── Feature_Request.md
│   │   └── Question.md
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── THIRD_PARTY_LICENSES.txt
├── data-common.tf
├── data-images.tf
├── docs/
│   ├── diagrams.md
│   ├── prerequisites.md
│   ├── quickstart.md
│   └── terraformoptions.md
├── examples/
│   ├── bastion/
│   │   └── README.md
│   ├── cluster/
│   │   └── README.md
│   ├── cluster-addons/
│   │   └── README.md
│   ├── extensions/
│   │   └── README.md
│   ├── iam/
│   │   └── README.md
│   ├── istio-mc/
│   │   ├── README.md
│   │   ├── c1.tf
│   │   ├── c2.tf
│   │   ├── contexts.tf
│   │   ├── istio.tf
│   │   ├── locals.tf
│   │   ├── outputs.tf
│   │   ├── providers.tf
│   │   ├── resources/
│   │   │   └── istio.template.yaml
│   │   ├── scripts/
│   │   │   ├── cloud-init.sh
│   │   │   ├── generate_kubeconfig.template.sh
│   │   │   ├── istioctl.template.sh
│   │   │   ├── kubeconfig_set_credentials.template.sh
│   │   │   ├── set_alias.template.sh
│   │   │   └── token_helper.template.sh
│   │   ├── templates.tf
│   │   ├── terraform.tfvars.example
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── network/
│   │   ├── README.md
│   │   └── vars-network-drg-create.auto.tfvars.example
│   ├── operator/
│   │   └── README.md
│   ├── profiles/
│   │   ├── README.md
│   │   ├── cluster-workers-only/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── network-cluster-workers/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── network-only/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   └── workers-only/
│   │       ├── main.tf
│   │       ├── variables.tf
│   │       └── versions.tf
│   ├── provider-basic.tf
│   ├── rms/
│   │   ├── README.md
│   │   ├── oke-cluster-only/
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── output.tf
│   │   │   ├── schema.yaml
│   │   │   ├── variables-cluster.tf
│   │   │   ├── variables-extensions.tf
│   │   │   ├── variables-iam.tf
│   │   │   ├── variables-network.tf
│   │   │   ├── variables-operator.tf
│   │   │   └── versions.tf
│   │   ├── oke-network-only/
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── output.tf
│   │   │   ├── schema.yaml
│   │   │   ├── variables-bastion.tf
│   │   │   ├── variables-iam.tf
│   │   │   ├── variables-network.tf
│   │   │   ├── variables-subnets.tf
│   │   │   └── versions.tf
│   │   └── oke-workers-only/
│   │       ├── data.tf
│   │       ├── main.tf
│   │       ├── output.tf
│   │       ├── schema.yaml
│   │       ├── variables.tf
│   │       └── versions.tf
│   ├── utilities/
│   │   └── README.md
│   └── workers/
│       └── README.md
├── migration.tf
├── module-bastion.tf
├── module-cluster-addons.tf
├── module-cluster.tf
├── module-extensions.tf
├── module-iam.tf
├── module-network.tf
├── module-operator.tf
├── module-utilities.tf
├── module-workers.tf
├── modules/
│   ├── bastion/
│   │   ├── README.md
│   │   ├── cloudinit.tf
│   │   ├── compute.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── cluster/
│   │   ├── README.md
│   │   ├── cluster.tf
│   │   ├── outputs.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── cluster-addons/
│   │   ├── README.md
│   │   ├── addons.tf
│   │   ├── delete_addons.tf
│   │   ├── outputs.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── extensions/
│   │   ├── README.md
│   │   ├── argocd.tf
│   │   ├── autoscaler.tf
│   │   ├── cilium.tf
│   │   ├── dcgm_exporter.tf
│   │   ├── gatekeeper.tf
│   │   ├── locals.tf
│   │   ├── metricserver.tf
│   │   ├── mpi_operator.tf
│   │   ├── multus.tf
│   │   ├── prometheus.tf
│   │   ├── rdma_cni_plugin.tf
│   │   ├── service_account.tf
│   │   ├── sriov_cni_plugin.tf
│   │   ├── sriov_device_plugin.tf
│   │   ├── variables.tf
│   │   ├── versions.tf
│   │   └── whereabouts.tf
│   ├── iam/
│   │   ├── README.md
│   │   ├── await.tf
│   │   ├── group-autoscaling.tf
│   │   ├── group-cluster.tf
│   │   ├── group-operator.tf
│   │   ├── group-workers.tf
│   │   ├── outputs.tf
│   │   ├── policy.tf
│   │   ├── tagging.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── network/
│   │   ├── README.md
│   │   ├── datasources.tf
│   │   ├── drgs.tf
│   │   ├── locals.tf
│   │   ├── nsg-bastion.tf
│   │   ├── nsg-controlplane.tf
│   │   ├── nsg-fss.tf
│   │   ├── nsg-loadbalancers-int.tf
│   │   ├── nsg-loadbalancers-pub.tf
│   │   ├── nsg-operator.tf
│   │   ├── nsg-pods.tf
│   │   ├── nsg-workers.tf
│   │   ├── rules.tf
│   │   ├── subnets.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── operator/
│   │   ├── README.md
│   │   ├── cloudinit.tf
│   │   ├── compute.tf
│   │   ├── variables.tf
│   │   └── versions.tf
│   ├── utilities/
│   │   ├── README.md
│   │   ├── drain.tf
│   │   ├── nodeready.tf
│   │   ├── ocir.tf
│   │   ├── resources/
│   │   │   └── await_node_readiness.tpl.sh
│   │   ├── variables.tf
│   │   └── versions.tf
│   └── workers/
│       ├── README.md
│       ├── cloudinit-oke.sh
│       ├── cloudinit-ubuntu.sh.tftpl
│       ├── cloudinit.tf
│       ├── clusternetworks.tf
│       ├── computecluster.tf
│       ├── data-faultdomains.tf
│       ├── data-shapes.tf
│       ├── gpumemorycluster.tf
│       ├── instance.tf
│       ├── instanceconfig.tf
│       ├── instancepools.tf
│       ├── locals.tf
│       ├── nodepools.tf
│       ├── outputs.tf
│       ├── variables.tf
│       ├── versions.tf
│       └── virtualnodepools.tf
├── variables-bastion.tf
├── variables-cluster-addons.tf
├── variables-cluster.tf
├── variables-common.tf
├── variables-extensions.tf
├── variables-iam.tf
├── variables-network.tf
├── variables-operator.tf
├── variables-utilities.tf
├── variables-workers.tf
└── versions.tf
Condensed preview — 197 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (794K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_Report.md",
    "chars": 3792,
    "preview": "---\nname: 🐛 Bug Report\nabout: If something isn't working as expected 🤔.\nlabels: bug\n---\n\n<!---\nPlease note the following"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Feature_Request.md",
    "chars": 1569,
    "preview": "---\nname: 🚀 Feature Request\nabout: I have a suggestion (and might want to implement myself 🙂)!\nlabels: enhancement\n---\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Question.md",
    "chars": 657,
    "preview": "---\nname: 💬 Question\nabout: Questions regarding the Terraform Oracle Cloud Infrastructure OKE module\nlabels: question\n--"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 288,
    "preview": "<!---\nThanks for filing an issue 😄 ! Before you submit, please read the following:\n\nCheck the other issue templates if y"
  },
  {
    "path": ".gitignore",
    "chars": 252,
    "preview": "#  Local .terraform directories\n**/.terraform/*\n\nprovider.tf\n\n# .tfstate files\n*.tfstate\n*.tfstate.*\n\n# .tfvars files\n*."
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1590,
    "preview": "# Contributing\n\nOracle welcomes contributions to this repository from anyone.\n\nIf you want to submit a pull request to f"
  },
  {
    "path": "LICENSE",
    "chars": 1839,
    "preview": "Copyright (c) 2019 Oracle and/or its affiliates. \n\nThe Universal Permissive License (UPL), Version 1.0\n\nSubject to the c"
  },
  {
    "path": "Makefile",
    "chars": 979,
    "preview": "PROJECT_NAME := \"terraform-oci-oke\"\nSHELL = /usr/bin/env bash -o pipefail\n.SHELLFLAGS = -ec\n\n.PHONY: all\nall: build\n\n##@"
  },
  {
    "path": "README.md",
    "chars": 5974,
    "preview": "# Terraform OKE for Oracle Cloud Infrastructure\n\n[changelog]: https://github.com/oracle-terraform-modules/terraform-oci-"
  },
  {
    "path": "THIRD_PARTY_LICENSES.txt",
    "chars": 90369,
    "preview": "github.com/open-policy-agent/gatekeeper\n-------- Copyrights\nCopyright 2018-2020 The Gatekeeper Authors\nCopyright 2018 Th"
  },
  {
    "path": "data-common.tf",
    "chars": 422,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "data-images.tf",
    "chars": 2853,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "docs/diagrams.md",
    "chars": 3158,
    "preview": "# Diagrams\n\nThis page collects the currently relevant architecture diagrams for the module.\n\n## Default topologies\n\n### "
  },
  {
    "path": "docs/prerequisites.md",
    "chars": 4025,
    "preview": "# Pre-requisites\n\n[Quick Start guide](https://github.com/oracle-terraform-modules/terraform-oci-oke/blob/main/docs/quick"
  },
  {
    "path": "docs/quickstart.md",
    "chars": 4691,
    "preview": "# Quickstart\n\n1. [Assumptions](#assumptions)\n2. [Pre-requisites](#pre-requisites)\n3. [Instructions](#instructions)\n4. [C"
  },
  {
    "path": "docs/terraformoptions.md",
    "chars": 42164,
    "preview": "# Terraform Options\n\nConfiguration Terraform Options:\n\n1. [General](#general)\n2. [Identity and Access Management](#ident"
  },
  {
    "path": "examples/bastion/README.md",
    "chars": 186,
    "preview": "# Bastion Example\n\nEnables the bastion host with a public IP for SSH access into the VCN.\n\n## Usage\n\nCopy `vars-bastion."
  },
  {
    "path": "examples/cluster/README.md",
    "chars": 674,
    "preview": "# Cluster Examples\n\nExample configurations for OKE cluster creation:\n\n| File | Description |\n|------|-------------|\n| `v"
  },
  {
    "path": "examples/cluster-addons/README.md",
    "chars": 242,
    "preview": "# Cluster Add-ons Example\n\nExample configuration for enabling and configuring OKE cluster add-ons such as CertManager an"
  },
  {
    "path": "examples/extensions/README.md",
    "chars": 1538,
    "preview": "# Extension Examples\n\nExample configurations for deploying Kubernetes extensions:\n\n| File | Extension | Description |\n|-"
  },
  {
    "path": "examples/iam/README.md",
    "chars": 349,
    "preview": "# IAM Examples\n\nExample configurations for IAM resources:\n\n| File | Description |\n|------|-------------|\n| `vars-iam-pol"
  },
  {
    "path": "examples/istio-mc/README.md",
    "chars": 6168,
    "preview": "# Multi-region service mesh with Istio and OKE\n\n## Assumptions\n\n1. A pair of OKE clusters in 2 different OCI regions wil"
  },
  {
    "path": "examples/istio-mc/c1.tf",
    "chars": 4545,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/c2.tf",
    "chars": 4331,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/contexts.tf",
    "chars": 2461,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/istio.tf",
    "chars": 1582,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/locals.tf",
    "chars": 3285,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/outputs.tf",
    "chars": 331,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/providers.tf",
    "chars": 1291,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/resources/istio.template.yaml",
    "chars": 2250,
    "preview": "apiVersion: install.istio.io/v1alpha1\nkind: IstioOperator\nspec:\n  values:\n    global:\n      meshID: ${mesh_id}\n      mul"
  },
  {
    "path": "examples/istio-mc/scripts/cloud-init.sh",
    "chars": 440,
    "preview": "#!/bin/sh\n\nmodprobe br_netfilter \nmodprobe nf_nat\nmodprobe xt_REDIRECT\nmodprobe xt_owner\nmodprobe iptable_nat\nmodprobe i"
  },
  {
    "path": "examples/istio-mc/scripts/generate_kubeconfig.template.sh",
    "chars": 339,
    "preview": "#!/usr/bin/bash\n# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive"
  },
  {
    "path": "examples/istio-mc/scripts/istioctl.template.sh",
    "chars": 308,
    "preview": "#!/usr/bin/bash\n# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive"
  },
  {
    "path": "examples/istio-mc/scripts/kubeconfig_set_credentials.template.sh",
    "chars": 472,
    "preview": "#!/usr/bin/bash\n# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive"
  },
  {
    "path": "examples/istio-mc/scripts/set_alias.template.sh",
    "chars": 228,
    "preview": "#!/usr/bin/bash\n# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive"
  },
  {
    "path": "examples/istio-mc/scripts/token_helper.template.sh",
    "chars": 450,
    "preview": "#!/bin/bash\n# Copyright 2024 Oracle Corporation and/or affiliates.\n# Licensed under the Universal Permissive License v 1"
  },
  {
    "path": "examples/istio-mc/templates.tf",
    "chars": 1734,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/terraform.tfvars.example",
    "chars": 1206,
    "preview": "    # provider\napi_fingerprint = \"\"\n\napi_private_key_path = \"~/.oci/oci_rsa.pem\"\n\nhome_region = \"ashburn\" # Use short fo"
  },
  {
    "path": "examples/istio-mc/variables.tf",
    "chars": 3458,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/istio-mc/versions.tf",
    "chars": 326,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/network/README.md",
    "chars": 1009,
    "preview": "# Network Examples\n\nExample configurations for VCN networking:\n\n| File | Description |\n|------|-------------|\n| `vars-ne"
  },
  {
    "path": "examples/network/vars-network-drg-create.auto.tfvars.example",
    "chars": 551,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/operator/README.md",
    "chars": 357,
    "preview": "# Operator Examples\n\nExample configurations for the operator host:\n\n| File | Description |\n|------|-------------|\n| `var"
  },
  {
    "path": "examples/profiles/README.md",
    "chars": 558,
    "preview": "# Deployment Profiles\n\nComposable deployment profiles that enable only the components you need:\n\n| Profile | Description"
  },
  {
    "path": "examples/profiles/cluster-workers-only/main.tf",
    "chars": 1011,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/cluster-workers-only/variables.tf",
    "chars": 796,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/cluster-workers-only/versions.tf",
    "chars": 324,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/profiles/network-cluster-workers/main.tf",
    "chars": 596,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/network-cluster-workers/variables.tf",
    "chars": 437,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/network-cluster-workers/versions.tf",
    "chars": 324,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/profiles/network-only/main.tf",
    "chars": 1488,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/network-only/variables.tf",
    "chars": 437,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/network-only/versions.tf",
    "chars": 324,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/profiles/workers-only/main.tf",
    "chars": 1007,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/workers-only/variables.tf",
    "chars": 749,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/profiles/workers-only/versions.tf",
    "chars": 324,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/provider-basic.tf",
    "chars": 363,
    "preview": "# Copyright 2017, 2023 Oracle Corporation and/or affiliates.\n# Licensed under the Universal Permissive License v 1.0 as "
  },
  {
    "path": "examples/rms/README.md",
    "chars": 636,
    "preview": "# Oracle Resource Manager Stack Examples\n\nPre-built configurations for deploying via [OCI Resource Manager (ORM)](https:"
  },
  {
    "path": "examples/rms/oke-cluster-only/data.tf",
    "chars": 888,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/main.tf",
    "chars": 6814,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/output.tf",
    "chars": 1594,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/schema.yaml",
    "chars": 27504,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/variables-cluster.tf",
    "chars": 1870,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/variables-extensions.tf",
    "chars": 3567,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/variables-iam.tf",
    "chars": 1802,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/variables-network.tf",
    "chars": 930,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/variables-operator.tf",
    "chars": 1597,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-cluster-only/versions.tf",
    "chars": 448,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/rms/oke-network-only/data.tf",
    "chars": 888,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/main.tf",
    "chars": 5083,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/output.tf",
    "chars": 2184,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/schema.yaml",
    "chars": 22230,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/variables-bastion.tf",
    "chars": 1268,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/variables-iam.tf",
    "chars": 1499,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/variables-network.tf",
    "chars": 2073,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/variables-subnets.tf",
    "chars": 1372,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-network-only/versions.tf",
    "chars": 448,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/rms/oke-workers-only/data.tf",
    "chars": 888,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-workers-only/main.tf",
    "chars": 3104,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-workers-only/output.tf",
    "chars": 1302,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-workers-only/schema.yaml",
    "chars": 15325,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-workers-only/variables.tf",
    "chars": 3664,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "examples/rms/oke-workers-only/versions.tf",
    "chars": 448,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "examples/utilities/README.md",
    "chars": 464,
    "preview": "# Utility Examples\n\nExample configurations for utility features:\n\n| File | Description |\n|------|-------------|\n| `vars-"
  },
  {
    "path": "examples/workers/README.md",
    "chars": 1515,
    "preview": "# Worker Examples\n\nExample configurations for various worker pool modes and features:\n\n| File | Description |\n|------|--"
  },
  {
    "path": "migration.tf",
    "chars": 1651,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "module-bastion.tf",
    "chars": 4093,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-cluster-addons.tf",
    "chars": 1038,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-cluster.tf",
    "chars": 7179,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-extensions.tf",
    "chars": 5611,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-iam.tf",
    "chars": 5735,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-network.tf",
    "chars": 11196,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-operator.tf",
    "chars": 5453,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-utilities.tf",
    "chars": 1291,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "module-workers.tf",
    "chars": 6053,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/bastion/README.md",
    "chars": 209,
    "preview": "# Bastion\n\nThis sub-module creates a bastion host in a public subnet for SSH access into the VCN.\n\n## Usage\n\nRefer to th"
  },
  {
    "path": "modules/bastion/cloudinit.tf",
    "chars": 1858,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/bastion/compute.tf",
    "chars": 2892,
    "preview": "# Copyright (c) 2019, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/bastion/variables.tf",
    "chars": 1229,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\r\n# Licensed under the Universal Permissive License "
  },
  {
    "path": "modules/bastion/versions.tf",
    "chars": 493,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster/README.md",
    "chars": 229,
    "preview": "# Cluster\n\nThis sub-module creates an OKE cluster with configurable CNI, Kubernetes version, and OIDC authentication.\n\n#"
  },
  {
    "path": "modules/cluster/cluster.tf",
    "chars": 4198,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster/outputs.tf",
    "chars": 462,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster/variables.tf",
    "chars": 1704,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster/versions.tf",
    "chars": 323,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster-addons/README.md",
    "chars": 216,
    "preview": "# Cluster Add-ons\n\nThis sub-module manages OKE cluster add-ons and their configurations.\n\n## Usage\n\nRefer to the [Cluste"
  },
  {
    "path": "modules/cluster-addons/addons.tf",
    "chars": 2795,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster-addons/delete_addons.tf",
    "chars": 1699,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster-addons/outputs.tf",
    "chars": 285,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster-addons/variables.tf",
    "chars": 684,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/cluster-addons/versions.tf",
    "chars": 323,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/README.md",
    "chars": 280,
    "preview": "# Extensions\n\nThis sub-module deploys Kubernetes extensions via Helm charts or YAML manifests, including Cilium, Multus,"
  },
  {
    "path": "modules/extensions/argocd.tf",
    "chars": 2421,
    "preview": "# Copyright (c) 2021, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/autoscaler.tf",
    "chars": 5088,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/cilium.tf",
    "chars": 7588,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/dcgm_exporter.tf",
    "chars": 3768,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/gatekeeper.tf",
    "chars": 2322,
    "preview": "# Copyright (c) 2021, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/locals.tf",
    "chars": 1116,
    "preview": "# Copyright (c)  2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 "
  },
  {
    "path": "modules/extensions/metricserver.tf",
    "chars": 2583,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/mpi_operator.tf",
    "chars": 2150,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/multus.tf",
    "chars": 1954,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/prometheus.tf",
    "chars": 3571,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/rdma_cni_plugin.tf",
    "chars": 2222,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/service_account.tf",
    "chars": 5289,
    "preview": "# Copyright (c) 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/sriov_cni_plugin.tf",
    "chars": 2265,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/sriov_device_plugin.tf",
    "chars": 2364,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/extensions/variables.tf",
    "chars": 4521,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/versions.tf",
    "chars": 487,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/extensions/whereabouts.tf",
    "chars": 4618,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/iam/README.md",
    "chars": 260,
    "preview": "# IAM\n\nThis sub-module creates IAM dynamic groups, policies, and optional tag namespaces for OKE resources.\n\n## Usage\n\nR"
  },
  {
    "path": "modules/iam/await.tf",
    "chars": 203,
    "preview": "resource \"time_sleep\" \"await_iam_resources\" {\n  count = anytrue([\n    local.has_policy_statements,\n    local.create_iam_"
  },
  {
    "path": "modules/iam/group-autoscaling.tf",
    "chars": 2468,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/group-cluster.tf",
    "chars": 1569,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/group-operator.tf",
    "chars": 2084,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/group-workers.tf",
    "chars": 2703,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/outputs.tf",
    "chars": 681,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/policy.tf",
    "chars": 2050,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/tagging.tf",
    "chars": 2667,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/variables.tf",
    "chars": 1370,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/iam/versions.tf",
    "chars": 443,
    "preview": "// Copyright (c) 2024 Oracle and/or its affiliates\n\n# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates."
  },
  {
    "path": "modules/network/README.md",
    "chars": 237,
    "preview": "# Network\n\nThis sub-module creates the VCN, subnets, network security groups, gateways, routing, DRG, and LPG configurat"
  },
  {
    "path": "modules/network/datasources.tf",
    "chars": 420,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/drgs.tf",
    "chars": 1807,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/locals.tf",
    "chars": 1078,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-bastion.tf",
    "chars": 4014,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-controlplane.tf",
    "chars": 9112,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-fss.tf",
    "chars": 5477,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-loadbalancers-int.tf",
    "chars": 6102,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-loadbalancers-pub.tf",
    "chars": 6153,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-operator.tf",
    "chars": 4583,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-pods.tf",
    "chars": 9764,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/nsg-workers.tf",
    "chars": 18358,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/rules.tf",
    "chars": 10712,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/subnets.tf",
    "chars": 12086,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/variables.tf",
    "chars": 2552,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/network/versions.tf",
    "chars": 323,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/operator/README.md",
    "chars": 240,
    "preview": "# Operator\n\nThis sub-module creates an operator host in a private subnet pre-installed with kubectl, Helm, and optional "
  },
  {
    "path": "modules/operator/cloudinit.tf",
    "chars": 14549,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/operator/compute.tf",
    "chars": 3599,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/operator/variables.tf",
    "chars": 1944,
    "preview": "# Copyright (c) 2019, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/operator/versions.tf",
    "chars": 493,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/utilities/README.md",
    "chars": 251,
    "preview": "# Utilities\n\nThis sub-module provides helper resources including node readiness checks, OCIR secret creation, and worker"
  },
  {
    "path": "modules/utilities/drain.tf",
    "chars": 1412,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/utilities/nodeready.tf",
    "chars": 1223,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/utilities/ocir.tf",
    "chars": 2334,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/utilities/resources/await_node_readiness.tpl.sh",
    "chars": 1452,
    "preview": "#!/usr/bin/env bash\n# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal "
  },
  {
    "path": "modules/utilities/variables.tf",
    "chars": 1107,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/utilities/versions.tf",
    "chars": 403,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/README.md",
    "chars": 227,
    "preview": "# Worker pools\n\nThis sub-module supports different modes of OKE worker node management with advanced configuration.\n\n## "
  },
  {
    "path": "modules/workers/cloudinit-oke.sh",
    "chars": 3130,
    "preview": "#!/usr/bin/env bash\n# Copyright (c) 2022, 2025 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal "
  },
  {
    "path": "modules/workers/cloudinit-ubuntu.sh.tftpl",
    "chars": 719,
    "preview": "#!/bin/bash\nset -x\n\nsource /etc/os-release\n\noke_package_name=\"oci-oke-node-all-${oke_minor_version}\"\n\n# Add OKE Ubuntu p"
  },
  {
    "path": "modules/workers/cloudinit.tf",
    "chars": 8122,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/clusternetworks.tf",
    "chars": 2072,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/computecluster.tf",
    "chars": 8572,
    "preview": "# Copyright (c) 2022, 2025 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/data-faultdomains.tf",
    "chars": 338,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/workers/data-shapes.tf",
    "chars": 677,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/workers/gpumemorycluster.tf",
    "chars": 2967,
    "preview": "# Copyright (c) 2026 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "modules/workers/instance.tf",
    "chars": 6340,
    "preview": "resource \"oci_core_instance\" \"workers\" {\n  for_each             = local.enabled_instances\n  availability_domain  = eleme"
  },
  {
    "path": "modules/workers/instanceconfig.tf",
    "chars": 9260,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/instancepools.tf",
    "chars": 4239,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/locals.tf",
    "chars": 16941,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/nodepools.tf",
    "chars": 12754,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/outputs.tf",
    "chars": 1633,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/variables.tf",
    "chars": 12840,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/versions.tf",
    "chars": 413,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "modules/workers/virtualnodepools.tf",
    "chars": 2886,
    "preview": "# Copyright (c) 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v 1.0 a"
  },
  {
    "path": "variables-bastion.tf",
    "chars": 3554,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-cluster-addons.tf",
    "chars": 826,
    "preview": "# Copyright (c) 2017, 2024 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-cluster.tf",
    "chars": 6235,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-common.tf",
    "chars": 2256,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-extensions.tf",
    "chars": 16004,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-iam.tf",
    "chars": 11921,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-network.tf",
    "chars": 11151,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-operator.tf",
    "chars": 5622,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-utilities.tf",
    "chars": 2393,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "variables-workers.tf",
    "chars": 10730,
    "preview": "# Copyright (c) 2022, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  },
  {
    "path": "versions.tf",
    "chars": 805,
    "preview": "# Copyright (c) 2017, 2023 Oracle Corporation and/or its affiliates.\n# Licensed under the Universal Permissive License v"
  }
]

About this extraction

This page contains the full source code of the oracle-terraform-modules/terraform-oci-oke GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 197 files (734.7 KB), approximately 193.5k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!