File openunison-control-0.0.13.obscpio of Package openunison-control
07070100000000000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002200000000openunison-control-0.0.13/.vscode07070100000001000081A400000000000000000000000167FBDA050000036E000000000000000000000000000000000000002E00000000openunison-control-0.0.13/.vscode/launch.json{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch file",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}",
"args":[
"install-satelite",
"/tmp/ou-test4.yaml",
"-q",
"orchestra-cd8e9b8c",
"-w",
"sat-client-secrets",
"openunison-cp",
"vcluster_test4_test4_openunison-kubernetes-dev"
],
"env": {
"KUBECONFIG": "/tmp/debugouctl"
}
}
]
}07070100000002000081A400000000000000000000000167FBDA0500002C5D000000000000000000000000000000000000002200000000openunison-control-0.0.13/LICENSE Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.
07070100000003000081A400000000000000000000000167FBDA0500000F41000000000000000000000000000000000000002400000000openunison-control-0.0.13/README.md# ouctl
This utility automates the deployment of OpenUnison's helm charts into your cluster. It has helm built in, so it doesn't need to use an external helm binary. It has two commands, one for deploying a stand-alone OpenUnison instance and one for deploying a satelite instance. Prior to using this tool, refer to the [OpenUnison deployment guide](https://openunison.github.io/deployauth/) for instructions on how to configure OpenUnison's values.yaml.
## install-auth-portal
This command will deploy a stand-alone OpenUnison instance. It can deploy as both an [authentication portal](https://openunison.github.io/) and as a [Namespace as a Service (NaaS) portal](https://openunison.github.io/namespace_as_a_service/). Prior to running this command, a values.yaml file will need to be created. It is the only required argument for this command. Optional flags:
```
-m, --cluster-management-chart string Helm chart for enabling cluster management (default "tremolo/openunison-k8s-cluster-management")
-b, --database-secret-path string Path to file containing the database password
-h, --help help for install-auth-portal
-o, --operator-chart string Helm chart for OpenUnison's operator (default "tremolo/openunison-operator")
-d, --operator-deploy-crds Deploy CRDs with the operator (default true)
-p, --operator-image string Operator image name (default "docker.io/tremolosecurity/openunison-k8s-operator:latest")
-c, --orchestra-chart string Helm chart of the orchestra portal (default "tremolo/orchestra")
-l, --orchestra-login-portal-chart string Helm chart for the orchestra login portal (default "tremolo/orchestra-login-portal")
-s, --secrets-file-path string Path to file containing the authentication secret
-t, --smtp-secret-path string Path to file containing the smtp password`
```
If run on an existing cluster, this command will upgrade existing charts. For authentication soltuions that require a secret, this command can be re-run without that secret safely.
## install-satelite
To support [Multi cluster SSO](https://openunison.github.io/multi_cluster_sso/) This command installs a satelite instance of OpenUnison onto a remote instance. It has three arguments:
1. The path to the new OpenUnison's values.yaml
2. The name of the context in your kubectl configuration file for the control plane Kubernetes cluster
3. The name of the context in your kubectl configuration file for the new satelite cluster
This command will make several changes to your values.yaml to automate the installation, such as configuring the `oidc` section for you. There's no need to create a secret for this mode, the command will create it for you.
Optional flags:
```
-a, --add-cluster-chart string Helm chart fir adding a cluster to OpenUnison (default "tremolo/openunison-k8s-add-cluster")
-h, --help help for install-satelite
-o, --operator-chart string Helm chart for OpenUnison's operator (default "tremolo/openunison-operator")
-d, --operator-deploy-crds Deploy CRDs with the operator (default true)
-p, --operator-image string Operator image name (default "docker.io/tremolosecurity/openunison-k8s-operator:latest")
-c, --orchestra-chart string Helm chart of the orchestra portal (default "tremolo/orchestra")
-l, --orchestra-login-portal-chart string Helm chart for the orchestra login portal (default "tremolo/orchestra-login-portal")
-s, --save-satelite-values-path string If specified, the values generated for the satelite integration on the control plane are saved to this path
```
This command can be re-run safely. If charts have already been deployed, they'll be updated.
07070100000004000081ED00000000000000000000000167FBDA0500000985000000000000000000000000000000000000002300000000openunison-control-0.0.13/build.sh#!/bin/bash
export VERSION="0.0.13"
rm -rf target
mkdir -p target
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o ./target/ouctl-$VERSION-macos .
env GOOS=darwin GOARCH=arm64 go build -ldflags "-s -w" -o ./target/ouctl-$VERSION-macos-arm64 .
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./target/ouctl-$VERSION-linux .
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o ./target/ouctl-$VERSION-win.exe .
#upx ./target/ouctl-$VERSION-macos
#upx ./target/ouctl-$VERSION-linux
#upx ./target/ouctl-$VERSION-win.exe
echo "Creating MacOS Intel"
mkdir target/darwin
cp ./target/ouctl-$VERSION-macos target/darwin/ouctl
chmod +x target/darwin/ouctl
cp LICENSE target/darwin/
cd target/darwin/
zip ouctl-$VERSION-macos.zip ./ouctl LICENSE
cd ../../
mv target/darwin/ouctl-$VERSION-macos.zip target/
rm -rf target/darwin
echo "Creating MacOS ARM64"
mkdir target/darwin-arm64
cp ./target/ouctl-$VERSION-macos-arm64 target/darwin-arm64/ouctl
chmod +x target/darwin-arm64/ouctl
cp LICENSE target/darwin-arm64/
cd target/darwin-arm64/
zip ouctl-$VERSION-macos-arm64.zip ./ouctl LICENSE
cd ../../
mv target/darwin-arm64/ouctl-$VERSION-macos-arm64.zip target/
rm -rf target/darwin-arm64
echo "Creating Linux Intel"
mkdir target/linux
cp ./target/ouctl-$VERSION-linux target/linux/ouctl
chmod +x target/linux/ouctl
cp LICENSE target/linux/
cd target/linux/
zip ouctl-$VERSION-linux.zip ./ouctl LICENSE
cd ../../
mv target/linux/ouctl-$VERSION-linux.zip target/
rm -rf target/linux
echo "Creating Windows Intel"
mkdir target/win
cp ./target/ouctl-$VERSION-win.exe target/win/ouctl.exe
cp LICENSE target/win/
cd target/win/
zip ouctl-$VERSION-win.zip ./ouctl.exe ./LICENSE
cd ../../
mv target/win/ouctl-$VERSION-win.zip target/
rm -rf target/win
export MACOS_SHA256=$(sha256sum ./target/ouctl-$VERSION-macos.zip | awk '{print $1}')
export MACOS_ARM64_SHA256=$(sha256sum ./target/ouctl-$VERSION-macos-arm64.zip | awk '{print $1}')
export LINUX_SHA256=$(sha256sum ./target/ouctl-$VERSION-linux.zip | awk '{print $1}')
export WIN_SHA256=$(sha256sum ./target/ouctl-$VERSION-win.zip | awk '{print $1}')
cat ouctl.yaml | sed "s/_VERSION_/$VERSION/g" | sed "s/_MAC_ARM64_SHA_/$MACOS_ARM64_SHA256/g" | sed "s/_MAC_SHA_/$MACOS_SHA256/g" | sed "s/_LINUX_SHA_/$LINUX_SHA256/g" | sed "s/_WIN_SHA_/$WIN_SHA256/g" | sed "s/_REPO_/$1/g" > target/ouctl.yaml
aws s3 sync ./target/ s3://tremolosecurity-maven/repository/$1/
07070100000005000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000001E00000000openunison-control-0.0.13/cmd07070100000006000081A400000000000000000000000167FBDA05000010B4000000000000000000000000000000000000003300000000openunison-control-0.0.13/cmd/installAuthPortal.go/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
*/
package cmd
import (
"errors"
"github.com/spf13/cobra"
"github.com/tremolosecurity/openunison-control/openunison"
)
var secretFile string
// installAuthPortalCmd represents the installAuthPortal command
var installAuthPortalCmd = &cobra.Command{
Use: "install-auth-portal",
Short: "Deploys the authentication portal for Kubernetes, requires one argument: The path to the values.yaml",
Long: ``,
Args: func(cmd *cobra.Command, args []string) error {
if len(args) < 1 {
return errors.New("Requires one argument: The path to the values.yaml")
}
return nil
},
Run: func(cmd *cobra.Command, args []string) {
pathToValuesYaml = args[0]
openunisonDeployment, err := openunison.NewOpenUnisonDeployment(namespace, operatorChart, orchestraChart, orchestraLoginPortalChart, pathToValuesYaml, secretFile, clusterManagementChart, pathToDbPassword, pathToSmtpPassword, skipClusterManagement, parseChartSlices(&additionalCharts), parseChartSlices(&preCharts), parseNamespaceLabels(&namespaceLabels))
if err != nil {
panic(err)
}
if openunisonDeployment.IsNaas() {
err = openunisonDeployment.DeployNaaSPortal()
if err != nil {
panic(err)
}
err = openunisonDeployment.DeployAdditionalCharts()
if err != nil {
panic(err)
}
} else {
err = openunisonDeployment.DeployAuthPortal()
if err != nil {
panic(err)
}
err = openunisonDeployment.DeployAdditionalCharts()
if err != nil {
panic(err)
}
}
},
}
func init() {
rootCmd.AddCommand(installAuthPortalCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
installAuthPortalCmd.PersistentFlags().StringVarP(&operatorChart, "operator-chart", "o", "tremolo/openunison-operator", "Helm chart for OpenUnison's operator, adding '@version' installs the specific version")
installAuthPortalCmd.PersistentFlags().StringVarP(&orchestraChart, "orchestra-chart", "c", "tremolo/orchestra", "Helm chart of the orchestra portal, adding '@version' installs the specific version")
installAuthPortalCmd.PersistentFlags().StringVarP(&orchestraLoginPortalChart, "orchestra-login-portal-chart", "l", "tremolo/orchestra-login-portal", "Helm chart for the orchestra login portal, adding '@version' installs the specific version")
installAuthPortalCmd.PersistentFlags().StringVarP(&secretFile, "secrets-file-path", "s", "", "Path to file containing the authentication secret")
installAuthPortalCmd.PersistentFlags().StringVarP(&clusterManagementChart, "cluster-management-chart", "m", "tremolo/openunison-k8s-cluster-management", "Helm chart for enabling cluster management, adding '@version' installs the specific version")
installAuthPortalCmd.PersistentFlags().StringVarP(&pathToDbPassword, "database-secret-path", "b", "", "Path to file containing the database password")
installAuthPortalCmd.PersistentFlags().StringVarP(&pathToSmtpPassword, "smtp-secret-path", "t", "", "Path to file containing the smtp password")
installAuthPortalCmd.PersistentFlags().BoolVarP(&skipClusterManagement, "skip-cluster-management", "k", false, "Set to true if skipping the cluster management chart when openunison.enable_provisioning is true")
preCharts = make([]string, 0)
additionalCharts = make([]string, 0)
installAuthPortalCmd.PersistentFlags().StringSliceVarP(&preCharts, "prerun-helm-charts", "u", []string{}, "Comma separated list of chart=path to deploy charts before OpenUnison is deployed, adding '@version' installs the specific version")
installAuthPortalCmd.PersistentFlags().StringSliceVarP(&additionalCharts, "additional-helm-charts", "r", []string{}, "Comma separated list of chart=path to deploy additional charts after OpenUnison is deployed, adding '@version' installs the specific version")
installAuthPortalCmd.PersistentFlags().StringSliceVarP(&namespaceLabels, "namespace-labels", "j", []string{}, "Comma separated list of name=value of labels to add to the openunison namespace")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// installAuthPortalCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
07070100000007000081A400000000000000000000000167FBDA0500001144000000000000000000000000000000000000003100000000openunison-control-0.0.13/cmd/installSatelite.go/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
*/
package cmd
import (
"errors"
"github.com/spf13/cobra"
"github.com/tremolosecurity/openunison-control/openunison"
)
// installSateliteCmd represents the installSatelite command
var installSateliteCmd = &cobra.Command{
Use: "install-satelite",
Short: "Installs a satelite OpenUnison that relies on a control-plane openunison for authentication",
Long: `This command will deploy an OpenUnison into a satelite cluster for authentication into that cluster using openid connect, using a control-plane OpenUnison as the identity provider. It will:
1. Verify that a cluster with the same name isn't in use
2. Create the appropriate Secret in the control plane
3. Generate the correct oidc configuration for the satelite and write it to the values file supplied by this command
4. Deploy openunison into the satelite cluster
5. Deploy the add-cluster chart into the control-plane cluster`,
Args: func(cmd *cobra.Command, args []string) error {
if len(args) < 3 {
return errors.New("requires three arguments: The path to the values.yaml, the control plane context name and the satelite context name")
}
return nil
},
Run: func(cmd *cobra.Command, args []string) {
pathToValuesYaml = args[0]
controlPlaneCtxName := args[1]
sateliteCtxName := args[2]
openunisonDeployment, err := openunison.NewSateliteDeployment(namespace, operatorChart, orchestraChart, orchestraLoginPortalChart, pathToValuesYaml, secretFile, controlPlaneCtxName, sateliteCtxName, addClusterChart, pathToSateliteYaml, parseChartSlices(&additionalCharts), parseChartSlices(&preCharts), parseNamespaceLabels(&namespaceLabels), controlPlaneOrchestraChartName, controlPlaneSecretName, skipCPIntegration)
if err != nil {
panic(err)
}
err = openunisonDeployment.DeployOpenUnisonSatelite()
if err != nil {
panic(err)
}
},
}
func init() {
rootCmd.AddCommand(installSateliteCmd)
installSateliteCmd.PersistentFlags().StringVarP(&operatorChart, "operator-chart", "o", "tremolo/openunison-operator", "Helm chart for OpenUnison's operator, adding '@version' installs the specific version")
installSateliteCmd.PersistentFlags().StringVarP(&orchestraChart, "orchestra-chart", "c", "tremolo/orchestra", "Helm chart of the orchestra portal, adding '@version' installs the specific version")
installSateliteCmd.PersistentFlags().StringVarP(&orchestraLoginPortalChart, "orchestra-login-portal-chart", "l", "tremolo/orchestra-login-portal", "Helm chart for the orchestra login portal, adding '@version' installs the specific version")
installSateliteCmd.PersistentFlags().StringVarP(&addClusterChart, "add-cluster-chart", "a", "tremolo/openunison-k8s-add-cluster", "Helm chart for adding a cluster to OpenUnison, adding '@version' installs the specific version")
installSateliteCmd.PersistentFlags().StringVarP(&pathToSateliteYaml, "save-satelite-values-path", "s", "", "If specified, the values generated for the satelite integration on the control plane are saved to this path")
preCharts = make([]string, 0)
additionalCharts = make([]string, 0)
installSateliteCmd.PersistentFlags().StringSliceVarP(&preCharts, "prerun-helm-charts", "u", []string{}, "Comma separated list of chart=path to deploy charts before OpenUnison is deployed, adding '@version' installs the specific version")
installSateliteCmd.PersistentFlags().StringSliceVarP(&additionalCharts, "additional-helm-charts", "r", []string{}, "Comma separated list of chart=path to deploy additional charts after OpenUnison is deployed, adding '@version' installs the specific version")
installSateliteCmd.PersistentFlags().StringSliceVarP(&namespaceLabels, "namespace-labels", "j", []string{}, "Comma separated list of name=value of labels to add to the openunison namespace")
installSateliteCmd.PersistentFlags().StringVarP(&controlPlaneOrchestraChartName, "control-plane-orchestra-chart-name", "q", "orchestra", "The name of the orchestra chart on the control plane")
installSateliteCmd.PersistentFlags().StringVarP(&controlPlaneSecretName, "control-plane-secret-name", "w", "orchestra-secrets-source", "The name of the secret on the control plane to store client secrets in")
installSateliteCmd.PersistentFlags().BoolVarP(&skipCPIntegration, "skip-controlplane-integration", "k", false, "Set to true if skipping the control plane integration step. Used when upgrading a satelite.")
}
07070100000008000081A400000000000000000000000167FBDA0500000A6E000000000000000000000000000000000000002600000000openunison-control-0.0.13/cmd/root.go/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
*/
package cmd
import (
"os"
"strings"
"github.com/spf13/cobra"
"github.com/tremolosecurity/openunison-control/openunison"
)
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "openunison-control",
Short: "Deploys OpenUnison into your cluster",
Long: `openunison-ctl automates the deployment of OpenUnison into your cluster. This tool will create the appropriate Secrets and deploy the correct helm charts for you`,
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
// namespace for openunison
var namespace string
var operatorImage string
var operatorDeployCrd bool
var operatorChart string
var orchestraChart string
var orchestraLoginPortalChart string
var pathToValuesYaml string
var addClusterChart string
var clusterManagementChart string
var pathToDbPassword string
var pathToSmtpPassword string
var pathToSateliteYaml string
var skipClusterManagement bool
var additionalCharts []string
var preCharts []string
var namespaceLabels []string
var controlPlaneOrchestraChartName string
var controlPlaneSecretName string
var skipCPIntegration bool
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
func init() {
// Here you will define your flags and configuration settings.
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
rootCmd.PersistentFlags().StringVarP(&namespace, "namespace", "n", "openunison", "namespace to deploy openunison into")
// Cobra also supports local flags, which will only run
// when this action is called directly.
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
func parseNamespaceLabels(namespaceLabels *[]string) map[string]string {
nsLabelsMap := make(map[string]string)
for _, labelPair := range *namespaceLabels {
split := strings.Split(labelPair, "=")
nsLabelsMap[split[0]] = split[1]
}
return nsLabelsMap
}
func parseChartSlices(additionalCharts *[]string) []openunison.HelmChartInfo {
var additionalChartsList []openunison.HelmChartInfo
for _, chartPair := range *additionalCharts {
split := strings.Split(chartPair, "=")
chart := openunison.HelmChartInfo{
Name: split[0],
ChartPath: split[1],
}
additionalChartsList = append(additionalChartsList, chart)
}
return additionalChartsList
}
07070100000009000081ED00000000000000000000000167FBDA0500000138000000000000000000000000000000000000002400000000openunison-control-0.0.13/depxml.sh#!/bin/bash
export VERSION="0.0.13"
rm -rf target
mkdir -p target
cat ouctl.yaml | sed "s/_VERSION_/$VERSION/g" | sed "s/_MAC_SHA_/$MACOS_SHA256/g" | sed "s/_LINUX_SHA_/$LINUX_SHA256/g" | sed "s/_WIN_SHA_/$WIN_SHA256/g" > target/ouctl.yaml
aws s3 sync ./target/ s3://tremolosecurity-maven/repository/$1/
0707010000000A000081A400000000000000000000000167FBDA0500001C4C000000000000000000000000000000000000002100000000openunison-control-0.0.13/go.modmodule github.com/tremolosecurity/openunison-control
go 1.23.0
toolchain go1.23.4
require k8s.io/client-go v0.32.3
require (
dario.cat/mergo v1.0.1 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect
github.com/Microsoft/hcsshim v0.12.9 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/containerd/errdefs v0.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/platforms v0.2.1 // indirect
github.com/distribution/reference v0.6.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
go.opentelemetry.io/otel v1.35.0 // indirect
go.opentelemetry.io/otel/metric v1.35.0 // indirect
go.opentelemetry.io/otel/trace v1.35.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
k8s.io/apiextensions-apiserver v0.32.3 // indirect
)
require (
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.3.0 // indirect
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
github.com/Masterminds/squirrel v1.5.4 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/chai2010/gettext-go v1.0.2 // indirect
github.com/containerd/containerd v1.7.27 // indirect
github.com/cyphar/filepath-securejoin v0.3.6 // indirect
github.com/docker/cli v25.0.1+incompatible // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
github.com/docker/docker v27.1.1+incompatible // indirect
github.com/docker/docker-credential-helpers v0.7.0 // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/go-errors/errors v1.4.2 // indirect
github.com/go-gorp/gorp/v3 v3.1.0 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/google/btree v1.0.1 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/gosuri/uitable v0.0.4 // indirect
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jmoiron/sqlx v1.4.0 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/locker v1.0.1 // indirect
github.com/moby/spdystream v0.5.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.20.2 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/rubenv/sql-migrate v1.7.1 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/cast v1.7.0 // indirect
github.com/spf13/cobra v1.8.1
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
golang.org/x/crypto v0.36.0 // indirect
golang.org/x/sync v0.12.0 // indirect
google.golang.org/grpc v1.67.0 // indirect
k8s.io/apiserver v0.32.3 // indirect
k8s.io/cli-runtime v0.32.2 // indirect
k8s.io/component-base v0.32.3 // indirect
k8s.io/kubectl v0.32.2 // indirect
oras.land/oras-go v1.2.5 // indirect
sigs.k8s.io/kustomize/api v0.18.0 // indirect
sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect
)
require (
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/net v0.37.0 // indirect
golang.org/x/oauth2 v0.23.0
golang.org/x/sys v0.31.0 // indirect
golang.org/x/term v0.30.0 // indirect
golang.org/x/text v0.23.0 // indirect
golang.org/x/time v0.7.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1
helm.sh/helm/v3 v3.17.3
k8s.io/api v0.32.3
k8s.io/apimachinery v0.32.3
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
0707010000000B000081A400000000000000000000000167FBDA050000B583000000000000000000000000000000000000002100000000openunison-control-0.0.13/go.sumdario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM=
github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/Microsoft/hcsshim v0.12.9 h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg=
github.com/Microsoft/hcsshim v0.12.9/go.mod h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70=
github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ=
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o=
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk=
github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII=
github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0=
github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII=
github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4=
github.com/containerd/errdefs v0.3.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsPEmzLso=
github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM=
github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc=
github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbTO1lpcGSkU=
github.com/docker/cli v25.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY=
github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8=
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4=
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc=
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI=
github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k=
github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY=
github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY=
github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
github.com/prometheus/client_golang v1.20.2 h1:5ctymQzZlyOON1666svgwn3s6IKWgfbjsejTMiXIyjg=
github.com/prometheus/client_golang v1.20.2/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmiUq4=
github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI=
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE=
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a h1:GIqLhp/cYUkuGuiT+vJk8vhOP86L4+SP5j8yXgeVpvI=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw=
google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg=
helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8=
k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY=
k8s.io/apiextensions-apiserver v0.32.3/go.mod h1:8YwcvVRMVzw0r1Stc7XfGAzB/SIVLunqApySV5V7Dss=
k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U=
k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
k8s.io/apiserver v0.32.3 h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8=
k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc=
k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks=
k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8=
k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k=
k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us=
k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8=
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo=
oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo=
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo=
sigs.k8s.io/kustomize/api v0.18.0/go.mod h1:f8isXnX+8b+SGLHQ6yO4JG1rdkZlvhaCf/uZbLVMb0U=
sigs.k8s.io/kustomize/kyaml v0.18.1 h1:WvBo56Wzw3fjS+7vBjN6TeivvpbW9GmRaWZ9CIVmt4E=
sigs.k8s.io/kustomize/kyaml v0.18.1/go.mod h1:C3L2BFVU1jgcddNBE1TxuVLgS46TjObMwW5FT9FcjYo=
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
0707010000000C000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002400000000openunison-control-0.0.13/helmmodel0707010000000D000081A400000000000000000000000167FBDA050000010A000000000000000000000000000000000000002F00000000openunison-control-0.0.13/helmmodel/.gitignore# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof
0707010000000E000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000003500000000openunison-control-0.0.13/helmmodel/.swagger-codegen0707010000000F000081A400000000000000000000000167FBDA0500000406000000000000000000000000000000000000003C00000000openunison-control-0.0.13/helmmodel/.swagger-codegen-ignore# Swagger Codegen Ignore
# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md
07070100000010000081A400000000000000000000000167FBDA0500000006000000000000000000000000000000000000003D00000000openunison-control-0.0.13/helmmodel/.swagger-codegen/VERSION3.0.4207070100000011000081A400000000000000000000000167FBDA0500000047000000000000000000000000000000000000003000000000openunison-control-0.0.13/helmmodel/.travis.ymllanguage: go
install:
- go get -d -v .
script:
- go build -v ./
07070100000012000081A400000000000000000000000167FBDA0500000381000000000000000000000000000000000000002E00000000openunison-control-0.0.13/helmmodel/README.md# Go API client for helmmodel
OpenUnison Helm Objects
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
- API version: v1
- Package version: 1.0.0
- Build package: io.swagger.codegen.v3.generators.go.GoClientCodegen
## Installation
Put the package under your project folder and add the following in import:
```golang
import "./helmmodel"
```
## Documentation for API Endpoints
All URIs are relative to */*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
## Documentation For Models
- [TrustedCertsInner](docs/TrustedCertsInner.md)
## Documentation For Authorization
Endpoints do not require authorization.
## Author
07070100000013000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002800000000openunison-control-0.0.13/helmmodel/api07070100000014000081A400000000000000000000000167FBDA05000001B3000000000000000000000000000000000000003500000000openunison-control-0.0.13/helmmodel/api/swagger.yamlopenapi: 3.0.1
info:
title: OpenUnison Helm Objects
description: OpenUnison Helm Objects
version: v1
servers:
- url: /
paths: {}
components:
schemas:
TrustedCerts:
type: array
items:
$ref: '#/components/schemas/TrustedCerts_inner'
TrustedCerts_inner:
type: object
properties:
name:
type: string
pem_b64:
type: string
x-original-swagger-version: "2.0"
07070100000015000081A400000000000000000000000167FBDA0500002D56000000000000000000000000000000000000002E00000000openunison-control-0.0.13/helmmodel/client.go/*
* OpenUnison Helm Objects
*
* OpenUnison Helm Objects
*
* API version: v1
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package helmmodel
import (
"bytes"
"context"
"encoding/json"
"encoding/xml"
"errors"
"fmt"
"io"
"mime/multipart"
"net/http"
"net/url"
"os"
"path/filepath"
"reflect"
"regexp"
"strconv"
"strings"
"time"
"unicode/utf8"
"golang.org/x/oauth2"
)
var (
jsonCheck = regexp.MustCompile("(?i:[application|text]/json)")
xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)")
)
// APIClient manages communication with the OpenUnison Helm Objects API vv1
// In most cases there should be only one, shared, APIClient.
type APIClient struct {
cfg *Configuration
common service // Reuse a single struct instead of allocating one for each service on the heap.
// API Services
}
type service struct {
client *APIClient
}
// NewAPIClient creates a new API client. Requires a userAgent string describing your application.
// optionally a custom http.Client to allow for advanced features such as caching.
func NewAPIClient(cfg *Configuration) *APIClient {
if cfg.HTTPClient == nil {
cfg.HTTPClient = http.DefaultClient
}
c := &APIClient{}
c.cfg = cfg
c.common.client = c
// API Services
return c
}
func atoi(in string) (int, error) {
return strconv.Atoi(in)
}
// selectHeaderContentType select a content type from the available list.
func selectHeaderContentType(contentTypes []string) string {
if len(contentTypes) == 0 {
return ""
}
if contains(contentTypes, "application/json") {
return "application/json"
}
return contentTypes[0] // use the first content type specified in 'consumes'
}
// selectHeaderAccept join all accept types and return
func selectHeaderAccept(accepts []string) string {
if len(accepts) == 0 {
return ""
}
if contains(accepts, "application/json") {
return "application/json"
}
return strings.Join(accepts, ",")
}
// contains is a case insenstive match, finding needle in a haystack
func contains(haystack []string, needle string) bool {
for _, a := range haystack {
if strings.ToLower(a) == strings.ToLower(needle) {
return true
}
}
return false
}
// Verify optional parameters are of the correct type.
func typeCheckParameter(obj interface{}, expected string, name string) error {
// Make sure there is an object.
if obj == nil {
return nil
}
// Check the type is as expected.
if reflect.TypeOf(obj).String() != expected {
return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String())
}
return nil
}
// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.
func parameterToString(obj interface{}, collectionFormat string) string {
var delimiter string
switch collectionFormat {
case "pipes":
delimiter = "|"
case "ssv":
delimiter = " "
case "tsv":
delimiter = "\t"
case "csv":
delimiter = ","
}
if reflect.TypeOf(obj).Kind() == reflect.Slice {
return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]")
}
return fmt.Sprintf("%v", obj)
}
// callAPI do the request.
func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {
return c.cfg.HTTPClient.Do(request)
}
// Change base path to allow switching to mocks
func (c *APIClient) ChangeBasePath(path string) {
c.cfg.BasePath = path
}
// prepareRequest build the request
func (c *APIClient) prepareRequest(
ctx context.Context,
path string, method string,
postBody interface{},
headerParams map[string]string,
queryParams url.Values,
formParams url.Values,
fileName string,
fileBytes []byte) (localVarRequest *http.Request, err error) {
var body *bytes.Buffer
// Detect postBody type and post.
if postBody != nil {
contentType := headerParams["Content-Type"]
if contentType == "" {
contentType = detectContentType(postBody)
headerParams["Content-Type"] = contentType
}
body, err = setBody(postBody, contentType)
if err != nil {
return nil, err
}
}
// add form parameters and file if available.
if strings.HasPrefix(headerParams["Content-Type"], "multipart/form-data") && len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
if body != nil {
return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
}
body = &bytes.Buffer{}
w := multipart.NewWriter(body)
for k, v := range formParams {
for _, iv := range v {
if strings.HasPrefix(k, "@") { // file
err = addFile(w, k[1:], iv)
if err != nil {
return nil, err
}
} else { // form value
w.WriteField(k, iv)
}
}
}
if len(fileBytes) > 0 && fileName != "" {
w.Boundary()
//_, fileNm := filepath.Split(fileName)
part, err := w.CreateFormFile("file", filepath.Base(fileName))
if err != nil {
return nil, err
}
_, err = part.Write(fileBytes)
if err != nil {
return nil, err
}
// Set the Boundary in the Content-Type
headerParams["Content-Type"] = w.FormDataContentType()
}
// Set Content-Length
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
w.Close()
}
if strings.HasPrefix(headerParams["Content-Type"], "application/x-www-form-urlencoded") && len(formParams) > 0 {
if body != nil {
return nil, errors.New("Cannot specify postBody and x-www-form-urlencoded form at the same time.")
}
body = &bytes.Buffer{}
body.WriteString(formParams.Encode())
// Set Content-Length
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
}
// Setup path and query parameters
url, err := url.Parse(path)
if err != nil {
return nil, err
}
// Adding Query Param
query := url.Query()
for k, v := range queryParams {
for _, iv := range v {
query.Add(k, iv)
}
}
// Encode the parameters.
url.RawQuery = query.Encode()
// Generate a new request
if body != nil {
localVarRequest, err = http.NewRequest(method, url.String(), body)
} else {
localVarRequest, err = http.NewRequest(method, url.String(), nil)
}
if err != nil {
return nil, err
}
// add header parameters, if any
if len(headerParams) > 0 {
headers := http.Header{}
for h, v := range headerParams {
headers.Set(h, v)
}
localVarRequest.Header = headers
}
// Override request host, if applicable
if c.cfg.Host != "" {
localVarRequest.Host = c.cfg.Host
}
// Add the user agent to the request.
localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent)
if ctx != nil {
// add context to the request
localVarRequest = localVarRequest.WithContext(ctx)
// Walk through any authentication.
// OAuth2 authentication
if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {
// We were able to grab an oauth2 token from the context
var latestToken *oauth2.Token
if latestToken, err = tok.Token(); err != nil {
return nil, err
}
latestToken.SetAuthHeader(localVarRequest)
}
// Basic HTTP Authentication
if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {
localVarRequest.SetBasicAuth(auth.UserName, auth.Password)
}
// AccessToken Authentication
if auth, ok := ctx.Value(ContextAccessToken).(string); ok {
localVarRequest.Header.Add("Authorization", "Bearer "+auth)
}
}
for header, value := range c.cfg.DefaultHeader {
localVarRequest.Header.Add(header, value)
}
return localVarRequest, nil
}
func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {
if strings.Contains(contentType, "application/xml") {
if err = xml.Unmarshal(b, v); err != nil {
return err
}
return nil
} else if strings.Contains(contentType, "application/json") {
if err = json.Unmarshal(b, v); err != nil {
return err
}
return nil
}
return errors.New("undefined response type")
}
// Add a file to the multipart request
func addFile(w *multipart.Writer, fieldName, path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
part, err := w.CreateFormFile(fieldName, filepath.Base(path))
if err != nil {
return err
}
_, err = io.Copy(part, file)
return err
}
// Prevent trying to import "fmt"
func reportError(format string, a ...interface{}) error {
return fmt.Errorf(format, a...)
}
// Set request body from an interface{}
func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {
if bodyBuf == nil {
bodyBuf = &bytes.Buffer{}
}
if reader, ok := body.(io.Reader); ok {
_, err = bodyBuf.ReadFrom(reader)
} else if b, ok := body.([]byte); ok {
_, err = bodyBuf.Write(b)
} else if s, ok := body.(string); ok {
_, err = bodyBuf.WriteString(s)
} else if s, ok := body.(*string); ok {
_, err = bodyBuf.WriteString(*s)
} else if jsonCheck.MatchString(contentType) {
err = json.NewEncoder(bodyBuf).Encode(body)
} else if xmlCheck.MatchString(contentType) {
xml.NewEncoder(bodyBuf).Encode(body)
}
if err != nil {
return nil, err
}
if bodyBuf.Len() == 0 {
err = fmt.Errorf("Invalid body type %s\n", contentType)
return nil, err
}
return bodyBuf, nil
}
// detectContentType method is used to figure out `Request.Body` content type for request header
func detectContentType(body interface{}) string {
contentType := "text/plain; charset=utf-8"
kind := reflect.TypeOf(body).Kind()
switch kind {
case reflect.Struct, reflect.Map, reflect.Ptr:
contentType = "application/json; charset=utf-8"
case reflect.String:
contentType = "text/plain; charset=utf-8"
default:
if b, ok := body.([]byte); ok {
contentType = http.DetectContentType(b)
} else if kind == reflect.Slice {
contentType = "application/json; charset=utf-8"
}
}
return contentType
}
// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go
type cacheControl map[string]string
func parseCacheControl(headers http.Header) cacheControl {
cc := cacheControl{}
ccHeader := headers.Get("Cache-Control")
for _, part := range strings.Split(ccHeader, ",") {
part = strings.Trim(part, " ")
if part == "" {
continue
}
if strings.ContainsRune(part, '=') {
keyval := strings.Split(part, "=")
cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",")
} else {
cc[part] = ""
}
}
return cc
}
// CacheExpires helper function to determine remaining time before repeating a request.
func CacheExpires(r *http.Response) time.Time {
// Figure out when the cache expires.
var expires time.Time
now, err := time.Parse(time.RFC1123, r.Header.Get("date"))
if err != nil {
return time.Now()
}
respCacheControl := parseCacheControl(r.Header)
if maxAge, ok := respCacheControl["max-age"]; ok {
lifetime, err := time.ParseDuration(maxAge + "s")
if err != nil {
expires = now
}
expires = now.Add(lifetime)
} else {
expiresHeader := r.Header.Get("Expires")
if expiresHeader != "" {
expires, err = time.Parse(time.RFC1123, expiresHeader)
if err != nil {
expires = now
}
}
}
return expires
}
func strlen(s string) int {
return utf8.RuneCountInString(s)
}
// GenericSwaggerError Provides access to the body, error and model on returned errors.
type GenericSwaggerError struct {
body []byte
error string
model interface{}
}
// Error returns non-empty string if there was an error.
func (e GenericSwaggerError) Error() string {
return e.error
}
// Body returns the raw bytes of the response
func (e GenericSwaggerError) Body() []byte {
return e.body
}
// Model returns the unpacked model of the error
func (e GenericSwaggerError) Model() interface{} {
return e.model
}
07070100000016000081A400000000000000000000000167FBDA05000007F3000000000000000000000000000000000000003500000000openunison-control-0.0.13/helmmodel/configuration.go/*
* OpenUnison Helm Objects
*
* OpenUnison Helm Objects
*
* API version: v1
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package helmmodel
import (
"net/http"
)
// contextKeys are used to identify the type of value in the context.
// Since these are string, it is possible to get a short description of the
// context key for logging and debugging using key.String().
type contextKey string
func (c contextKey) String() string {
return "auth " + string(c)
}
var (
// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.
ContextOAuth2 = contextKey("token")
// ContextBasicAuth takes BasicAuth as authentication for the request.
ContextBasicAuth = contextKey("basic")
// ContextAccessToken takes a string oauth2 access token as authentication for the request.
ContextAccessToken = contextKey("accesstoken")
// ContextAPIKey takes an APIKey as authentication for the request
ContextAPIKey = contextKey("apikey")
)
// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
type BasicAuth struct {
UserName string `json:"userName,omitempty"`
Password string `json:"password,omitempty"`
}
// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
type APIKey struct {
Key string
Prefix string
}
type Configuration struct {
BasePath string `json:"basePath,omitempty"`
Host string `json:"host,omitempty"`
Scheme string `json:"scheme,omitempty"`
DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
UserAgent string `json:"userAgent,omitempty"`
HTTPClient *http.Client
}
func NewConfiguration() *Configuration {
cfg := &Configuration{
BasePath: "/",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
return cfg
}
func (c *Configuration) AddDefaultHeader(key string, value string) {
c.DefaultHeader[key] = value
}
07070100000017000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002900000000openunison-control-0.0.13/helmmodel/docs07070100000018000081A400000000000000000000000167FBDA0500000198000000000000000000000000000000000000003E00000000openunison-control-0.0.13/helmmodel/docs/TrustedCertsInner.md# TrustedCertsInner
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**PemB64** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000019000081A400000000000000000000000167FBDA050000067F000000000000000000000000000000000000003000000000openunison-control-0.0.13/helmmodel/git_push.sh#!/bin/sh
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
#
# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update"
git_user_id=$1
git_repo_id=$2
release_note=$3
if [ "$git_user_id" = "" ]; then
git_user_id="GIT_USER_ID"
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
fi
if [ "$git_repo_id" = "" ]; then
git_repo_id="GIT_REPO_ID"
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
fi
if [ "$release_note" = "" ]; then
release_note="Minor update"
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
fi
# Initialize the local directory as a Git repository
git init
# Adds the files in the local repository and stages them for commit.
git add .
# Commits the tracked changes and prepares them to be pushed to a remote repository.
git commit -m "$release_note"
# Sets the new remote
git_remote=`git remote`
if [ "$git_remote" = "" ]; then # git remote not defined
if [ "$GIT_TOKEN" = "" ]; then
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git
else
git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git
fi
fi
git pull origin master
# Pushes (Forces) the changes in the local repository up to the remote repository
echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git"
git push origin master 2>&1 | grep -v 'To https'
0707010000001A000081A400000000000000000000000167FBDA0500000124000000000000000000000000000000000000003200000000openunison-control-0.0.13/helmmodel/helm-api.yamlswagger: "2.0"
info:
description: "OpenUnison Helm Objects"
version: "v1"
title: "OpenUnison Helm Objects"
paths: {}
definitions:
TrustedCerts:
type: array
items:
type: object
properties:
name:
type: string
pem_b64:
type: string0707010000001B000081A400000000000000000000000167FBDA0500000130000000000000000000000000000000000000004100000000openunison-control-0.0.13/helmmodel/model_trusted_certs_inner.go/*
* OpenUnison Helm Objects
*
* OpenUnison Helm Objects
*
* API version: v1
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package helmmodel
type TrustedCertsInner struct {
Name string `json:"name,omitempty"`
PemB64 string `json:"pem_b64,omitempty"`
}
0707010000001C000081A400000000000000000000000167FBDA05000004B2000000000000000000000000000000000000003000000000openunison-control-0.0.13/helmmodel/response.go/*
* OpenUnison Helm Objects
*
* OpenUnison Helm Objects
*
* API version: v1
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package helmmodel
import (
"net/http"
)
type APIResponse struct {
*http.Response `json:"-"`
Message string `json:"message,omitempty"`
// Operation is the name of the swagger operation.
Operation string `json:"operation,omitempty"`
// RequestURL is the request URL. This value is always available, even if the
// embedded *http.Response is nil.
RequestURL string `json:"url,omitempty"`
// Method is the HTTP method used for the request. This value is always
// available, even if the embedded *http.Response is nil.
Method string `json:"method,omitempty"`
// Payload holds the contents of the response body (which may be nil or empty).
// This is provided here as the raw response.Body() reader will have already
// been drained.
Payload []byte `json:"-"`
}
func NewAPIResponse(r *http.Response) *APIResponse {
response := &APIResponse{Response: r}
return response
}
func NewAPIResponseWithError(errorMessage string) *APIResponse {
response := &APIResponse{Message: errorMessage}
return response
}
0707010000001D000081A400000000000000000000000167FBDA05000000D9000000000000000000000000000000000000002200000000openunison-control-0.0.13/main.go/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
*/
package main
import (
"math/rand"
"time"
"github.com/tremolosecurity/openunison-control/cmd"
)
func main() {
rand.Seed(time.Now().UnixNano())
cmd.Execute()
}
0707010000001E000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002500000000openunison-control-0.0.13/openunison0707010000001F000081A400000000000000000000000167FBDA050000B9A7000000000000000000000000000000000000003100000000openunison-control-0.0.13/openunison/deployer.gopackage openunison
import (
"bytes"
"context"
"encoding/base64"
"encoding/json"
"flag"
"fmt"
"io"
"io/ioutil"
"log"
"math/rand"
"os"
"path/filepath"
"strings"
"time"
"github.com/tremolosecurity/openunison-control/helmmodel"
"github.com/tremolosecurity/openunison-control/openunisonmodel"
"gopkg.in/yaml.v3"
v1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/chart/loader"
"helm.sh/helm/v3/pkg/cli"
"helm.sh/helm/v3/pkg/registry"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
_ "k8s.io/client-go/plugin/pkg/client/auth"
)
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
func randSeq(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
type OperatorDeployment struct {
chart string
}
// for sting info about additional helm charts
type HelmChartInfo struct {
Name string
ChartPath string
}
// tracks the information about the deployment
type OpenUnisonDeployment struct {
namespace string
operator OperatorDeployment
orchestraChart string
orchestraLoginPortalChart string
pathToValuesYaml string
secretFile string
secret string
clientset *kubernetes.Clientset
controlPlaneContextName string
satelateContextName string
addClusterChart string
clusterManagementChart string
pathToDbPassword string
pathToSmtpPassword string
pathToSaveSateliteValues string
skipClusterManagement bool
helmValues map[string]interface{}
additionalCharts []HelmChartInfo
preCharts []HelmChartInfo
namespaceLabels map[string]string
cpOrchestraName string
cpSecretName string
skipCpIntegration bool
}
// creates a new deployment structure
func NewOpenUnisonDeployment(namespace string, operatorChart string, orchestraChart string, orchestraLoginPortalChart string, pathToValuesYaml string, secretFile string, clusterManagementChart string, pathToDbPassword string, pathToSmtpPassword string, skipClusterManagement bool, additionalCharts []HelmChartInfo, preCharts []HelmChartInfo, namespaceLabels map[string]string) (*OpenUnisonDeployment, error) {
ou, err := NewSateliteDeployment(namespace, operatorChart, orchestraChart, orchestraLoginPortalChart, pathToValuesYaml, secretFile, "", "", "", "", additionalCharts, preCharts, namespaceLabels, "orchestra", "orchestra-secrets-source", false)
if err != nil {
return nil, err
}
ou.clusterManagementChart = clusterManagementChart
ou.pathToDbPassword = pathToDbPassword
ou.pathToSmtpPassword = pathToSmtpPassword
ou.skipClusterManagement = skipClusterManagement
return ou, nil
}
// creates a new deployment structure
func NewSateliteDeployment(namespace string, operatorChart string, orchestraChart string, orchestraLoginPortalChart string, pathToValuesYaml string, secretFile string, controlPlanContextName string, sateliteContextName string, addClusterChart string, pathToSateliteYaml string, additionalCharts []HelmChartInfo, preCharts []HelmChartInfo, namespaceLabels map[string]string, cpOrchestraName string, cpSecretName string, skipCpIntegration bool) (*OpenUnisonDeployment, error) {
ou := &OpenUnisonDeployment{}
ou.namespace = namespace
ou.operator.chart = operatorChart
ou.orchestraChart = orchestraChart
ou.orchestraLoginPortalChart = orchestraLoginPortalChart
ou.pathToValuesYaml = pathToValuesYaml
ou.secretFile = secretFile
ou.controlPlaneContextName = controlPlanContextName
ou.satelateContextName = sateliteContextName
ou.addClusterChart = addClusterChart
ou.pathToSaveSateliteValues = pathToSateliteYaml
ou.additionalCharts = additionalCharts
ou.preCharts = preCharts
err := ou.loadKubernetesConfiguration()
if err != nil {
return nil, err
}
err = ou.loadHelmValues()
if err != nil {
return nil, err
}
ou.namespaceLabels = namespaceLabels
ou.cpOrchestraName = cpOrchestraName
ou.cpSecretName = cpSecretName
ou.skipCpIntegration = skipCpIntegration
return ou, nil
}
func (ou *OpenUnisonDeployment) loadHelmValues() error {
fmt.Printf("Loading values from %s...\n", ou.pathToValuesYaml)
yamlValues, err := ioutil.ReadFile(ou.pathToValuesYaml)
if err != nil {
return err
}
ou.helmValues = make(map[string]interface{})
err = yaml.Unmarshal(yamlValues, &ou.helmValues)
if err != nil {
return err
}
fmt.Printf("...loaded\n")
return nil
}
func (ou *OpenUnisonDeployment) IsNaas() bool {
return isNaasFromHelm(ou.helmValues)
}
func isNaasFromHelm(helm map[string]interface{}) bool {
openunison, ok := helm["openunison"].(map[string]interface{})
if !ok {
return false
}
enableProvisioning := openunison["enable_provisioning"].(bool)
return enableProvisioning
}
// set the current k8s context
func (ou *OpenUnisonDeployment) setCurrentContext(ctxName string) (string, error) {
flag.Parse()
currentContextName := ctxName
pathOptions := clientcmd.NewDefaultPathOptions()
curCfg, err := pathOptions.GetStartingConfig()
if err != nil {
return "", err
}
if curCfg.CurrentContext != ctxName {
_, ok := curCfg.Contexts[ctxName]
if !ok {
return "", fmt.Errorf("context %s does not exist", ctxName)
}
currentContextName = curCfg.CurrentContext
curCfg.CurrentContext = ctxName
clientConfig := clientcmd.NewDefaultClientConfig(*curCfg, nil)
clientcmd.ModifyConfig(clientConfig.ConfigAccess(), *curCfg, false)
}
return currentContextName, nil
}
// get the current k8s configuration
func (ou *OpenUnisonDeployment) loadKubernetesConfiguration() error {
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
configOverrides := &clientcmd.ConfigOverrides{}
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
config, err := kubeConfig.ClientConfig()
if err != nil {
return err
}
ou.clientset, err = kubernetes.NewForConfig(config)
if err != nil {
return err
}
return nil
}
// deploy a NaaS Portal
func (ou *OpenUnisonDeployment) DeployNaaSPortal() error {
openunison := ou.helmValues["openunison"].(map[string]interface{})
enableProvisioning := openunison["enable_provisioning"].(bool)
if !enableProvisioning {
return fmt.Errorf("openunison.enableProvisioning MUST be true")
}
externalEnabled := false
internalEnabled := false
externalSuffix := ""
internalSuffix := ""
naas, found := openunison["naas"].(map[string]interface{})
if found {
groups, found := naas["groups"].(map[string]interface{})
if found {
external, found := groups["external"].(map[string]interface{})
if found {
externalEnabled, found = external["enabled"].(bool)
}
}
}
useStdJit, found := openunison["use_standard_jit_workflow"].(bool)
if !found {
useStdJit = true
}
if externalEnabled && useStdJit {
return fmt.Errorf("openunison.naas.groups.external is true, openunison.use_standard_jit_workflow MUST be false")
}
_, ok := ou.helmValues["database"]
if !ok {
return fmt.Errorf("no database section to your values.yaml")
}
_, ok = ou.helmValues["smtp"]
if !ok {
return fmt.Errorf("no smtp section to your values.yaml")
}
// deploy the operator
settings := cli.New()
actionConfig := new(action.Configuration)
if err := actionConfig.Init(settings.RESTClientGetter(), ou.namespace, os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
return err
}
listClient := action.NewList(actionConfig)
clusterManagementChartDeployed := false
listClient.All = true
releases, err := listClient.Run()
for _, release := range releases {
if release.Name == "cluster-management" && release.Namespace == ou.namespace {
clusterManagementChartDeployed = true
}
}
// add standard groups to NaaS based on roles defined
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = "cluster-management"
chartReq, err := ou.locateChart(ou.clusterManagementChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
openunisonCfg, ok := mergedValues["openunison"]
if !ok {
return fmt.Errorf("When configuring NaaS groups, no openunison section")
}
naasCfg, ok := openunisonCfg.(map[string]interface{})["naas"]
if !ok {
return fmt.Errorf("When configuring NaaS groups, no openunison.naas section")
}
groupsCfg, ok := naasCfg.(map[string]interface{})["groups"]
if !ok {
return fmt.Errorf("When configuring NaaS groups, no openunison.naas.groups section")
}
external, found := groupsCfg.(map[string]interface{})["external"].(map[string]interface{})
if found {
externalEnabled, found = external["enabled"].(bool)
if externalEnabled {
externalSuffix = external["suffix"].(string)
}
}
internal, found := groupsCfg.(map[string]interface{})["internal"].(map[string]interface{})
if found {
internalEnabled, found = internal["enabled"].(bool)
if internalEnabled {
internalSuffix = internal["suffix"].(string)
}
}
defaultGroups, ok := groupsCfg.(map[string]interface{})["default"]
if !ok {
return fmt.Errorf("When configuring NaaS groups, no openunison.naas.groups.default section")
}
naasRoles := make([]string, 0)
for _, group := range defaultGroups.([]interface{}) {
groupName := group.(map[string]interface{})["name"].(string)
naasRoles = append(naasRoles, groupName)
}
azRules := make([]interface{}, len(naasRoles))
for i, role := range naasRoles {
azRules[i] = fmt.Sprintf("k8s-namespace-%v-k8s-%v-*", role, "k8s")
}
if internalEnabled {
azRules = append(azRules, fmt.Sprintf("k8s-cluster-k8s-%v-administrators%v", "k8s", internalSuffix))
}
if externalEnabled {
azRules = append(azRules, fmt.Sprintf("k8s-cluster-k8s-%v-administrators%v", "k8s", externalSuffix))
}
ou.helmValues["openunison"].(map[string]interface{})["az_groups"] = azRules
// with merged values, create azRules
err = ou.DeployAuthPortal()
if err != nil {
return err
}
//if !openunisonDeployed {
fmt.Print("Deploying the Cluster Management chart\n")
if ou.skipClusterManagement {
fmt.Println("Skipping cluster management chart")
} else {
if !clusterManagementChartDeployed {
fmt.Println("Chart not deployed, installing")
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = "cluster-management"
chartReq, err := ou.locateChart(ou.clusterManagementChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
//_, err = client.Run(chartReq, mergedValues)
_, err = ou.runChartInstall(client, client.ReleaseName, chartReq, mergedValues, actionConfig)
if err != nil {
return err
}
} else {
fmt.Println("Chart deployed, upgrading")
client := action.NewUpgrade(actionConfig)
client.Namespace = ou.namespace
chartReq, err := ou.locateChart(ou.clusterManagementChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
//_, err = client.Run("cluster-management", chartReq, mergedValues)
_, err = ou.runChartUpgrade(client, "cluster-management", chartReq, mergedValues)
if err != nil {
return err
}
}
}
return nil
}
// deploys an OpenUnison satelite
func (ou *OpenUnisonDeployment) DeployOpenUnisonSatelite() error {
originalContextName, err := ou.setCurrentContext(ou.controlPlaneContextName)
if err != nil {
return err
}
ou.loadKubernetesConfiguration()
// get the satelite cluster name
clusterName, ok := ou.helmValues["k8s_cluster_name"].(string)
if !ok {
return fmt.Errorf("k8s_cluster_name must be defined in the satalite values.yaml")
}
satelateReleaseName := "satellite-" + clusterName
settings := cli.New()
actionConfig := new(action.Configuration)
if err := actionConfig.Init(settings.RESTClientGetter(), ou.namespace, os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
return err
}
listClient := action.NewList(actionConfig)
listClient.All = true
releases, err := listClient.Run()
sateliteIntegrated := false
for _, release := range releases {
if release.Namespace == ou.namespace && release.Name == satelateReleaseName {
sateliteIntegrated = true
}
}
ouSecret, err := ou.clientset.CoreV1().Secrets(ou.namespace).Get(context.TODO(), ou.cpSecretName, metav1.GetOptions{})
foundSecret := false
if err != nil {
ouSecret = &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: ou.cpSecretName,
Namespace: ou.namespace,
},
Data: map[string][]byte{},
}
} else {
foundSecret = true
}
sateliteClientSecret, ok := ouSecret.Data["cluster-idp-"+clusterName]
if !ok {
fmt.Println("SSO Client Secret doesn't exist, creating")
ou.secret = string(randSeq((64)))
ouSecret.Data["cluster-idp-"+clusterName] = []byte(ou.secret)
if foundSecret {
ou.clientset.CoreV1().Secrets(ou.namespace).Update(context.TODO(), ouSecret, metav1.UpdateOptions{})
} else {
_, err = ou.clientset.CoreV1().Secrets(ou.namespace).Create(context.TODO(), ouSecret, metav1.CreateOptions{})
if err != nil {
return err
}
}
fmt.Println("Created")
} else {
fmt.Println("SSO client secret already created, retrieving")
ou.secret = string(sateliteClientSecret)
}
respBytes, err := ou.clientset.RESTClient().Get().RequestURI("/apis/apiextensions.k8s.io/v1/customresourcedefinitions/openunisons.openunison.tremolo.io").DoRaw(context.TODO())
if err != nil {
return err
}
ouCrd := make(map[string]interface{})
json.Unmarshal(respBytes, &ouCrd)
spec := ouCrd["spec"].(map[string]interface{})
versions, ok := spec["versions"].([]interface{})
if !ok {
return fmt.Errorf("no spec in openunison crd")
}
ouVersion := ""
for _, v := range versions {
version := v.(map[string]interface{})
served := version["served"].(bool)
stored := version["storage"].(bool)
if served && stored {
ouVersion = version["name"].(string)
}
}
if ouVersion == "" {
return fmt.Errorf("could not find version of openunisons")
}
fmt.Printf("OpenUnison CRD Version : %v\n", ouVersion)
respBytes, err = ou.clientset.RESTClient().Get().RequestURI("/apis/openunison.tremolo.io/" + ouVersion + "/namespaces/" + ou.namespace + "/openunisons/" + ou.cpOrchestraName).DoRaw(context.TODO())
if err != nil {
return err
}
orchestra := make(map[string]interface{})
json.Unmarshal(respBytes, &orchestra)
var orchestraObj openunisonmodel.OpenUnison
json.Unmarshal(respBytes, &orchestraObj)
specObj := orchestraObj.Spec
hosts := specObj.Hosts
host := hosts[0]
names := host.Names
nonSecretData := specObj.NonSecretData
naasEnabled := false
naasGroupsInternal := false
naasGroupsExternal := false
naasInternalSuffix := ""
naasExternalSuffix := ""
naasRoles := make([]map[string]interface{}, 0)
for _, nsd := range nonSecretData {
nsdName := nsd.Name
if nsdName == "OPENUNISON_PROVISIONING_ENABLED" {
naasEnabled = nsd.Value == "true"
} else if nsdName == "openunison.naas.external" {
naasGroupsExternal = nsd.Value == "true"
} else if nsdName == "openunison.naas.internal" {
naasGroupsInternal = nsd.Value == "true"
} else if nsdName == "openunison.naas.external-suffix" {
naasExternalSuffix = nsd.Value
} else if nsdName == "openunison.naas.internal-suffix" {
naasInternalSuffix = nsd.Value
} else if nsdName == "openunison.naas.default-groups" {
enc, err := base64.StdEncoding.DecodeString(nsd.Value)
if err != nil {
return err
}
var localRoles []map[string]interface{}
err = json.Unmarshal(enc, &localRoles)
if err != nil {
return err
}
naasRoles = append(naasRoles, localRoles...)
} else if nsdName == "openunison.naas.roles" {
enc, err := base64.StdEncoding.DecodeString(nsd.Value)
if err != nil {
return err
}
var localRoles []map[string]interface{}
err = json.Unmarshal(enc, &localRoles)
if err != nil {
return err
}
naasRoles = append(naasRoles, localRoles...)
}
}
idpHostName := ""
for _, name := range names {
if name.EnvVar == "OU_HOST" {
idpHostName = name.Name
}
}
if idpHostName == "" {
return fmt.Errorf("could not find OU_HOST name in orchestra CRD")
}
fmt.Printf("Control Plane IdP host name: %v\n", idpHostName)
keyStore := specObj.KeyStore
keyPairs := keyStore.KeyPairs
keys := keyPairs.Keys
isLocalGeneratedCert := false
for _, key := range keys {
if key.Name == "unison-ca" {
isLocalGeneratedCert = true
}
}
fmt.Printf("Is the operator generating the TLS certificate? : %t\n", isLocalGeneratedCert)
idpCert := ""
if isLocalGeneratedCert {
ouTlsKey, err := ou.clientset.CoreV1().Secrets(ou.namespace).Get(context.TODO(), "ou-tls-certificate", metav1.GetOptions{})
if err != nil {
return err
}
idpCert = string(ouTlsKey.Data["tls.crt"])
} else {
trustedCerts := keyStore.TrustedCertificates
for _, cert := range trustedCerts {
if cert.Name == "unison-ca" {
bytes, err := base64.StdEncoding.DecodeString(cert.PemData)
if err != nil {
return err
}
idpCert = string(bytes)
}
}
}
fmt.Printf("IdP Certificate : %v\n", idpCert)
// create updates to yaml
// setup OIDC
oidcConfig := make(map[string]interface{})
oidcConfig["client_id"] = "cluster-idp-" + clusterName
oidcConfig["issuer"] = "https://" + idpHostName + "/auth/idp/cluster-idp-" + clusterName
oidcConfig["user_in_idtoken"] = true
oidcConfig["domain"] = ""
oidcConfig["scopes"] = "openid email profile groups"
claims := make(map[string]string)
claims["sub"] = "sub"
claims["email"] = "email"
claims["given_name"] = "given_name"
claims["family_name"] = "family_name"
claims["display_name"] = "display_name"
claims["groups"] = "groups"
oidcConfig["claims"] = claims
ou.helmValues["oidc"] = oidcConfig
trustedCertAlias := "trusted-idp"
//add the idp's certificate
if idpCert != "" {
trustCertsJson, err := json.Marshal(ou.helmValues["trusted_certs"])
if err != nil {
panic(err)
}
var trustedCerts []helmmodel.TrustedCertsInner
json.Unmarshal(trustCertsJson, &trustedCerts)
// trustedCerts, ok := ou.helmValues["trusted_certs"].([]interface{})
// if !ok {
// trustedCerts = make([]interface{}, 0)
// }
foundCert := false
b64Cert := base64.StdEncoding.EncodeToString([]byte(idpCert))
for _, cert := range trustedCerts {
if cert.Name == "trusted-idp" {
cert.PemB64 = b64Cert
foundCert = true
break
} else if cert.PemB64 == b64Cert {
foundCert = true
trustedCertAlias = cert.Name
break
}
}
if !foundCert {
trustedCert := &helmmodel.TrustedCertsInner{}
trustedCert.Name = "trusted-idp"
trustedCert.PemB64 = b64Cert
trustedCerts = append(trustedCerts, *trustedCert)
tcjson, err := json.Marshal(trustedCerts)
if err != nil {
panic(err)
}
var tcarray []map[string]string
json.Unmarshal(tcjson, &tcarray)
ou.helmValues["trusted_certs"] = tcarray
}
}
managementProxyUrl := ""
externalNaasGroupName := ""
sateliteManagementEnabled := false
mgmtProxy := make(map[string]interface{})
if naasEnabled {
openunison := ou.helmValues["openunison"].(map[string]interface{})
mgmtProxy, sateliteManagementEnabled = openunison["management_proxy"].(map[string]interface{})
if sateliteManagementEnabled {
fmt.Printf("Management proxy enabled\n")
mgmtEnabled, ok := mgmtProxy["enabled"]
if ok && mgmtEnabled == true {
// set remote configuration
managementProxyUrl = mgmtProxy["host"].(string)
remote := make(map[string]string)
remote["issuer"] = fmt.Sprintf("https://%v/auth/idp/remotek8s", idpHostName)
if idpCert != "" {
remote["cert_alias"] = trustedCertAlias
}
mgmtProxy["remote"] = remote
azRules := make([]interface{}, len(naasRoles))
for i, role := range naasRoles {
azRules[i] = fmt.Sprintf("k8s-namespace-%v-k8s-%v-*", role["name"].(string), clusterName)
}
if naasGroupsInternal {
azRules = append(azRules, fmt.Sprintf("k8s-cluster-k8s-%v-administrators%v", clusterName, naasInternalSuffix))
}
if naasGroupsExternal {
azRules = append(azRules, fmt.Sprintf("k8s-cluster-k8s-%v-administrators%v", clusterName, naasExternalSuffix))
externalNaasGroupName = mgmtProxy["external_admin_group"].(string)
mgmtProxy["external_suffix"] = naasExternalSuffix
}
// if there are pre-set az_groups, they should be honored
if openunison["az_groups"] != nil {
sateliteAzGroups := openunison["az_groups"].([]interface{})
openunison["az_groups"] = append(sateliteAzGroups, azRules...)
} else {
openunison["az_groups"] = azRules
}
}
}
}
dataToWrite, err := yaml.Marshal(&ou.helmValues)
if err != nil {
return err
}
ioutil.WriteFile(ou.pathToValuesYaml, dataToWrite, 0644)
if !ou.skipCpIntegration {
shouldReturn, returnValue := ou.integrateSatelite(ou.helmValues, clusterName, err, sateliteIntegrated, actionConfig, satelateReleaseName, settings, nil, "", "", naasRoles)
if shouldReturn {
return returnValue
}
}
// deploy the satelte
fmt.Printf("Switching to %v\n", ou.satelateContextName)
_, err = ou.setCurrentContext(ou.satelateContextName)
if err != nil {
return err
}
fmt.Printf("Deploying the satelite")
ou.loadKubernetesConfiguration()
err = ou.DeployAuthPortal()
if err != nil {
return err
}
err = ou.DeployAdditionalCharts()
if err != nil {
return err
}
if !ou.skipCpIntegration {
if naasEnabled && sateliteManagementEnabled {
// if the naas is enabled, need to deploy management
targetCert := ""
var trustedCerts []helmmodel.TrustedCertsInner
trustCertsJson, err := json.Marshal(ou.helmValues["trusted_certs"])
if err != nil {
panic(err)
}
json.Unmarshal(trustCertsJson, &trustedCerts)
for _, trustedCert := range trustedCerts {
certName := trustedCert.Name
if certName == "unison-ca" {
targetCert = trustedCert.PemB64
}
}
// trustedCerts, ok := ou.helmValues["trusted_certs"].([]interface{})
// if ok {
// for _, t := range trustedCerts {
// trustedCert := t.(map[string]interface{})
// certName := trustedCert["name"].(string)
// if certName == "unison-ca" {
// targetCert = trustedCert["pem_b64"].(string)
// }
// }
// }
if targetCert == "" {
// not found, load the ou-tls-certificate secret
tlsSecret, err := ou.clientset.CoreV1().Secrets(ou.namespace).Get(context.TODO(), "ou-tls-certificate", metav1.GetOptions{})
if err == nil {
targetCert = base64.StdEncoding.EncodeToString(tlsSecret.Data["tls.crt"])
}
}
management := make(map[string]interface{})
management["enabled"] = true
target := make(map[string]interface{})
management["target"] = target
target["url"] = managementProxyUrl
target["tokenType"] = "oidc"
target["useToken"] = true
if targetCert != "" {
target["base64_certificate"] = targetCert
}
// redeployment satelite integration
ou.setCurrentContext(ou.controlPlaneContextName)
ou.loadKubernetesConfiguration()
shouldReturn, returnValue := ou.integrateSatelite(ou.helmValues, clusterName, err, sateliteIntegrated, actionConfig, satelateReleaseName, settings, management, naasExternalSuffix, externalNaasGroupName, naasRoles)
if shouldReturn {
return returnValue
}
}
}
// leave the kubeconfig the way we found it
ou.setCurrentContext(originalContextName)
fmt.Println(sateliteIntegrated)
fmt.Println(originalContextName)
return nil
}
func (ou *OpenUnisonDeployment) integrateSatelite(helmValues map[string]interface{}, clusterName string, err error, sateliteIntegrated bool, actionConfig *action.Configuration, satelateReleaseName string, settings *cli.EnvSettings, management map[string]interface{}, externalGroupNameSuffix string, externalGroupName string, naasRoles []map[string]interface{}) (bool, error) {
cpYaml := `{
"cluster": {
"name": "%v",
"label": "%v",
"description": "Cluster %v",
"parent": "%v",
"sso": {
"enabled": true,
"inactivityTimeoutSeconds": 900,
"client_secret": "%v"
},
"hosts": {
"portal": "%v",
"dashboard": "%v"
},
"az_groups": [
]
}
}`
parentOrg := ""
openunison := helmValues["openunison"].(map[string]interface{})
if openunison != nil {
if openunison["control_plane"] != nil {
controlPlane := openunison["control_plane"].(map[string]interface{})
parentOrg = controlPlane["parent"].(string)
}
}
if parentOrg == "" {
parentOrg = "B158BD40-0C1B-11E3-8FFD-0800200C9A66"
}
sateliteNetwork := helmValues["network"].(map[string]interface{})
cpYaml = fmt.Sprintf(cpYaml,
clusterName,
clusterName,
clusterName,
parentOrg,
ou.cpSecretName,
sateliteNetwork["openunison_host"].(string),
sateliteNetwork["dashboard_host"].(string))
fmt.Printf("Integrating satelite into the control plane with yaml: \n%v\n", cpYaml)
cpValues := make(map[string]interface{})
err = json.Unmarshal([]byte(cpYaml), &cpValues)
if err != nil {
return true, err
}
if management != nil {
cluster := cpValues["cluster"].(map[string]interface{})
cluster["management"] = management
if externalGroupName != "" {
cluster["external_group_name"] = externalGroupName
cluster["external_group_name_suffix"] = externalGroupNameSuffix
}
}
if helmValues["openunison"].(map[string]interface{})["az_groups"] != nil {
satelateAzGroups := helmValues["openunison"].(map[string]interface{})["az_groups"].([]interface{})
cpAzGroups := make([]string, len(satelateAzGroups))
for i, group := range satelateAzGroups {
cpAzGroups[i] = string(group.(string))
}
cpValues["cluster"].(map[string]interface{})["az_groups"] = cpAzGroups
}
if openunison != nil {
if openunison["control_plane"] != nil {
controlPlane := openunison["control_plane"].(map[string]interface{})
additionalBadges := controlPlane["additional_badges"].([]interface{})
if additionalBadges != nil {
cpValues["cluster"].(map[string]interface{})["additional_badges"] = additionalBadges
}
}
}
cpValues["naasRoles"] = naasRoles
if ou.pathToSaveSateliteValues != "" {
dataToWrite, err := yaml.Marshal(&cpValues)
if err != nil {
return false, err
}
ioutil.WriteFile(ou.pathToSaveSateliteValues, dataToWrite, 0644)
}
_, err = ou.setCurrentContext(ou.controlPlaneContextName)
if err != nil {
return true, err
}
err = ou.loadKubernetesConfiguration()
if err != nil {
return true, err
}
if !sateliteIntegrated {
fmt.Print("Satelite not integrated yet, deploying")
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = satelateReleaseName
chartReq, err := ou.locateChart(ou.addClusterChart, &client.ChartPathOptions, settings)
if err != nil {
return true, err
}
//_, err = client.Run(chartReq, cpValues)
_, err = ou.runChartInstall(client, client.ReleaseName, chartReq, cpValues, actionConfig)
if err != nil {
return true, err
}
} else {
fmt.Println("Satelite already integrated, upgrading")
client := action.NewUpgrade(actionConfig)
client.Namespace = ou.namespace
chartReq, err := ou.locateChart(ou.addClusterChart, &client.ChartPathOptions, settings)
if err != nil {
return true, err
}
//_, err = client.Run(satelateReleaseName, chartReq, cpValues)
_, err = ou.runChartUpgrade(client, satelateReleaseName, chartReq, cpValues)
if err != nil {
return true, err
}
}
return false, nil
}
func (ou *OpenUnisonDeployment) runChartInstall(client *action.Install, name string, chartReq *chart.Chart, cpValues map[string]interface{}, actionConfig *action.Configuration) (bool, error) {
for i := 0; i <= 5; i++ {
_, err := client.Run(chartReq, cpValues)
if err != nil {
fmt.Printf("Error installing chart %s - %s, deleting and retrying\n", name, err.Error())
del := action.NewUninstall(actionConfig)
_, err := del.Run(name)
if err != nil {
return true, err
}
fmt.Println("Waiting a few seconds...")
time.Sleep(5 * time.Second)
fmt.Printf("Try #%i\n", i)
} else {
return false, nil
}
}
return true, fmt.Errorf("Failed to install chart %s after five tries", name)
}
func (ou *OpenUnisonDeployment) runChartUpgrade(client *action.Upgrade, name string, chartReq *chart.Chart, cpValues map[string]interface{}) (bool, error) {
for i := 0; i <= 5; i++ {
_, err := client.Run(name, chartReq, cpValues)
if err != nil {
fmt.Printf("Error installing chart %s - %s, retrying\n", name, err.Error())
fmt.Println("Waiting a few seconds...")
time.Sleep(5 * time.Second)
fmt.Printf("Try #%i\n", i)
} else {
return false, nil
}
}
return true, fmt.Errorf("Failed to install chart %s after five tries", name)
}
// set the secret
func (ou *OpenUnisonDeployment) setupSecret(helmValues map[string]interface{}) error {
if ou.skipCpIntegration {
return nil
}
secret, err := ou.clientset.CoreV1().Secrets(ou.namespace).Get(context.TODO(), "orchestra-secrets-source", metav1.GetOptions{})
foundSecret := false
if err != nil {
secret = &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "orchestra-secrets-source",
Namespace: ou.namespace,
},
Data: map[string][]byte{},
}
// generate the standard keys
secret.Data["unisonKeystorePassword"] = []byte(randSeq((64)))
secret.Data["K8S_DB_SECRET"] = []byte(randSeq((64)))
} else {
foundSecret = true
}
hasSecret := ou.secretFile != "" || ou.secret != ""
var authSecret []byte
if hasSecret {
if ou.secret != "" {
authSecret = []byte(ou.secret)
} else {
authSecret, err = ioutil.ReadFile(ou.secretFile)
if err != nil {
return err
}
authSecret = []byte(strings.TrimSpace(string(authSecret)))
}
}
authNeedsSecret := false
authSecretLabel := ""
foundAuth := false
_, ok := helmValues["oidc"]
if ok {
authNeedsSecret = true
foundAuth = true
authSecretLabel = "OIDC_CLIENT_SECRET"
} else {
_, ok = helmValues["github"]
if ok {
foundAuth = true
authNeedsSecret = true
authSecretLabel = "GITHUB_SECRET_ID"
} else {
_, ok = helmValues["active_directory"]
if ok {
authNeedsSecret = true
foundAuth = true
authSecretLabel = "AD_BIND_PASSWORD"
} else {
_, ok = helmValues["saml"]
authNeedsSecret = false
foundAuth = true
}
}
}
if !foundAuth {
return fmt.Errorf("No authentication found, one of active_directory, github, oidc, saml required")
}
_, ok = secret.Data[authSecretLabel]
if !ok {
// there's not already a secret
if authNeedsSecret && !hasSecret {
return fmt.Errorf("Authentication type requires a secret in a file specified in -s or --secrets-file-path")
}
}
if authNeedsSecret && hasSecret {
secret.Data[authSecretLabel] = authSecret
}
openunison := helmValues["openunison"].(map[string]interface{})
enableNaaS := openunison["enable_provisioning"].(bool)
if enableNaaS {
//check for the database password
_, hasJdbcPassword := secret.Data["OU_JDBC_PASSWORD"]
if ou.pathToDbPassword != "" {
dbSecret, err := ioutil.ReadFile(ou.pathToDbPassword)
if err != nil {
return err
}
dbSecret = []byte(strings.TrimSpace(string(dbSecret)))
fmt.Println("Setting database password\n")
secret.Data["OU_JDBC_PASSWORD"] = dbSecret
} else if !hasJdbcPassword {
return fmt.Errorf("if openunison.enable_provisioning is true, -b or --database-secret-path must be set")
}
// check for SMTP
_, hasSmtpPassword := secret.Data["SMTP_PASSWORD"]
if ou.pathToSmtpPassword != "" {
smtpSecret, err := ioutil.ReadFile(ou.pathToSmtpPassword)
if err != nil {
return err
}
smtpSecret = []byte(strings.TrimSpace(string(smtpSecret)))
fmt.Println("Setting SMTP password")
secret.Data["SMTP_PASSWORD"] = smtpSecret
} else if !hasSmtpPassword {
return fmt.Errorf("if openunison.enable_provisioning is true, -t or --smtp-secret-path must be set")
}
}
if !foundSecret {
fmt.Printf("Creating secret\n")
secret, err = ou.clientset.CoreV1().Secrets(ou.namespace).Create(context.TODO(), secret, metav1.CreateOptions{})
if err != nil {
return err
}
} else {
fmt.Printf("Updating secret\n")
secret, err = ou.clientset.CoreV1().Secrets(ou.namespace).Update(context.TODO(), secret, metav1.UpdateOptions{})
if err != nil {
return err
}
}
return nil
}
// deploys all extra charts
func (ou *OpenUnisonDeployment) DeployAdditionalCharts() error {
fmt.Printf("Deploying additional charts: %d\n", len(ou.additionalCharts))
for _, chart := range ou.additionalCharts {
err := ou.deployChart(chart)
if err != nil {
return err
}
}
return nil
}
// deploys all extra charts
func (ou *OpenUnisonDeployment) DeployPreCharts() error {
for _, chart := range ou.preCharts {
err := ou.deployChart(chart)
if err != nil {
return err
}
}
return nil
}
// deploys additional charts after OpenUnison is running
func (ou *OpenUnisonDeployment) deployChart(chart HelmChartInfo) error {
fmt.Printf("Deploying chart %s, %s\n", chart.Name, chart.ChartPath)
settings := cli.New()
actionConfig := new(action.Configuration)
if err := actionConfig.Init(settings.RESTClientGetter(), ou.namespace, os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
return err
}
listClient := action.NewList(actionConfig)
found := false
listClient.All = true
listClient.Failed = true
releases, err := listClient.Run()
if err != nil {
return err
}
for _, release := range releases {
if release.Name == chart.Name && release.Namespace == ou.namespace {
found = true
}
}
if !found {
fmt.Println("Chart not deployed, installing")
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = chart.Name
chartReq, err := ou.locateChart(chart.ChartPath, &client.ChartPathOptions, settings)
if err != nil {
return err
}
//_, err = client.Run(chartReq, ou.helmValues)
_, err = ou.runChartInstall(client, client.ReleaseName, chartReq, ou.helmValues, actionConfig)
if err != nil {
return err
}
} else {
fmt.Println("Chart deployed, upgrading")
client := action.NewUpgrade(actionConfig)
client.Namespace = ou.namespace
chartReq, err := ou.locateChart(chart.ChartPath, &client.ChartPathOptions, settings)
if err != nil {
return err
}
//_, err = client.Run(chart.Name, chartReq, ou.helmValues)
_, err = ou.runChartUpgrade(client, chart.Name, chartReq, ou.helmValues)
if err != nil {
return err
}
}
fmt.Printf("Chart %s, %s deployed\n", chart.Name, chart.ChartPath)
return nil
}
// specifies chart version
func (ou *OpenUnisonDeployment) locateChart(configChartName string, chartPathOptions *action.ChartPathOptions, settings *cli.EnvSettings) (*chart.Chart, error) {
chartName := configChartName
chartVersion := ""
if strings.Contains(configChartName, "@") {
chartName = configChartName[0:strings.Index(configChartName, "@")]
chartVersion = configChartName[strings.Index(configChartName, "@")+1:]
fmt.Printf("Chart version specified for %s: %s\n", chartName, chartVersion)
chartPathOptions.Version = chartVersion
} else {
fmt.Printf("No chart version specified for %s\n", chartName)
}
// Check if the chart is using OCI
if strings.HasPrefix(chartName, "oci://") {
fmt.Printf("OCI chart detected: %s\n", chartName)
// Step 1: Initialize OCI client
ociClient, err := registry.NewClient(
registry.ClientOptEnableCache(true),
registry.ClientOptDebug(true),
)
if err != nil {
return nil, fmt.Errorf("failed to initialize OCI client: %v", err)
}
// Step 2: Create a temporary directory
tempDir, err := os.MkdirTemp("", "helm-oci-*")
if err != nil {
return nil, fmt.Errorf("failed to create temporary directory: %v", err)
}
fmt.Printf("Temporary directory created: %s\n", tempDir)
debugLog := func(format string, v ...interface{}) {
fmt.Printf(format+"\n", v...)
}
actionConfig := new(action.Configuration)
if err := actionConfig.Init(settings.RESTClientGetter(), "", os.Getenv("HELM_DRIVER"), debugLog); err != nil {
return nil, fmt.Errorf("failed to initialize Helm action configuration: %v", err)
}
actionConfig.RegistryClient = ociClient
// Step 3: Pull the chart from the OCI registry
pull := action.NewPullWithOpts(action.WithConfig(actionConfig))
pull.DestDir = tempDir
pull.Version = chartVersion
pull.Settings = &cli.EnvSettings{}
_, err = pull.Run(chartName)
if err != nil {
return nil, fmt.Errorf("failed to pull OCI chart %s: %v", chartName, err)
}
// Step 4: Load the chart from the temporary directory
chartFilePath := filepath.Join(tempDir, filepath.Base(chartName)+"-"+chartVersion+".tgz")
chartReq, err := loader.Load(chartFilePath)
if err != nil {
return nil, fmt.Errorf("failed to load OCI chart from %s: %v", chartFilePath, err)
}
return chartReq, nil
}
cp, err := chartPathOptions.LocateChart(chartName, settings)
if err != nil {
return nil, err
}
chartReq, err := loader.Load(cp)
if err != nil {
return nil, err
}
return chartReq, nil
}
// deploys OpenUnison into the cluster
func (ou *OpenUnisonDeployment) DeployAuthPortal() error {
// check the kubernetes dashboard ns exists
dashboardNamespace := "kubernetes-dashboard"
dashboardConfig, ok := ou.helmValues["dashboard"].(map[interface{}]interface{})
if ok {
dashboardNamespace = dashboardConfig["namespace"].(string)
}
ou.checkNamespace("Dashboard", dashboardNamespace)
// check the openunison namespace exists, if not, create it
ou.checkNamespace("OpenUnison", ou.namespace)
network := ou.helmValues["network"].(map[string]interface{})
ingressType := network["ingress_type"].(string)
if ingressType == "istio" {
fmt.Println("Enabling Istio on the openunison namespace")
ouNs, err := ou.clientset.CoreV1().Namespaces().Get(context.TODO(), ou.namespace, metav1.GetOptions{})
if err != nil {
return err
}
ouNs.Labels["istio-injection"] = "enabled"
ou.clientset.CoreV1().Namespaces().Update(context.TODO(), ouNs, metav1.UpdateOptions{})
}
err := ou.setupSecret(ou.helmValues)
if err != nil {
return err
}
// run pre-charts
err = ou.DeployPreCharts()
if err != nil {
return err
}
// deploy the operator
settings := cli.New()
actionConfig := new(action.Configuration)
if err := actionConfig.Init(settings.RESTClientGetter(), ou.namespace, os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
return err
}
listClient := action.NewList(actionConfig)
openunisonDeployed := false
orchestraDeployed := false
orchestraLoginPortalDeployed := false
listClient.All = true
listClient.Failed = true
releases, err := listClient.Run()
for _, release := range releases {
if release.Name == "openunison" && release.Namespace == ou.namespace {
openunisonDeployed = true
}
if release.Name == "orchestra" && release.Namespace == ou.namespace {
orchestraDeployed = true
}
if release.Name == "orchestra-login-portal" && release.Namespace == ou.namespace {
orchestraLoginPortalDeployed = true
}
}
//if !openunisonDeployed {
fmt.Print("Deploying the OpenUnison Operator\n")
if !openunisonDeployed {
fmt.Println("Chart not deployed, installing")
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = "openunison"
chartReq, err := ou.locateChart(ou.operator.chart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
//_, err = client.Run(chartReq, vals)
_, err = ou.runChartInstall(client, client.ReleaseName, chartReq, ou.helmValues, actionConfig)
if err != nil {
return err
}
} else {
fmt.Println("Chart deployed, upgrading")
client := action.NewUpgrade(actionConfig)
client.Namespace = ou.namespace
chartReq, err := ou.locateChart(ou.operator.chart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
_, err = ou.runChartUpgrade(client, "openunison", chartReq, ou.helmValues)
if err != nil {
return err
}
}
// wait until the operator is up and running
err = waitForDeployment(ou, "openunison-operator")
if err != nil {
return err
}
fmt.Println("Checking for a previously failed run")
_, err = ou.clientset.CoreV1().Pods(ou.namespace).Get(context.TODO(), "test-orchestra-orchestra", metav1.GetOptions{})
if err == nil {
fmt.Println("test-orchestra-orchestra Pod exists, deleting")
err = ou.clientset.CoreV1().Pods(ou.namespace).Delete(context.TODO(), "test-orchestra-orchestra", metav1.DeleteOptions{})
if err != nil {
return err
}
fmt.Println("Deleted test-orchestra-orchestra")
}
fmt.Println("Deploying the orchestra chart")
var deployErr error
if !orchestraDeployed {
// deploy orchestra, make sure that it deploys
fmt.Println("Orchestra doesn't exist, installing")
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = "orchestra"
chartReq, err := ou.locateChart(ou.orchestraChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
//_, deployErr = client.Run(chartReq, mergedValues)
_, deployErr = ou.runChartInstall(client, client.ReleaseName, chartReq, mergedValues, actionConfig)
} else {
// deploy orchestra, make sure that it deploys
fmt.Println("Orchestra exists, upgrading")
client := action.NewUpgrade(actionConfig)
client.Namespace = ou.namespace
chartReq, err := ou.locateChart(ou.orchestraChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
//_, deployErr = client.Run("orchestra", chartReq, mergedValues)
_, deployErr = ou.runChartUpgrade(client, "orchestra", chartReq, mergedValues)
}
if deployErr != nil {
_, err = ou.clientset.CoreV1().Pods(ou.namespace).Get(context.TODO(), "test-orchestra-orchestra", metav1.GetOptions{})
if err == nil {
fmt.Println("Failed prechecks:")
req := ou.clientset.CoreV1().Pods(ou.namespace).GetLogs("test-orchestra-orchestra", &v1.PodLogOptions{})
podLogs, err := req.Stream(context.TODO())
if err != nil {
return err
}
defer podLogs.Close()
buf := new(bytes.Buffer)
_, err = io.Copy(buf, podLogs)
if err != nil {
return err
}
str := buf.String()
fmt.Println(str)
return nil
} else {
return deployErr
}
return err
}
// wait until the orchestra container is running
fmt.Printf("Waiting for a few seconds for the operator to run")
time.Sleep(5 * time.Second)
err = waitForDeployment(ou, "openunison-orchestra")
if err != nil {
return err
}
fmt.Printf("Waiting for a few seconds for the webhooks to settle to run")
time.Sleep(10 * time.Second)
fmt.Println("Deploying the orchestra-login-portal chart")
if !orchestraLoginPortalDeployed {
// deploy the orchestra-login-portal charts
fmt.Println("orchestra-login-portal not deployed, installing")
client := action.NewInstall(actionConfig)
client.Namespace = ou.namespace
client.ReleaseName = "orchestra-login-portal"
chartReq, err := ou.locateChart(ou.orchestraLoginPortalChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
//_, err = client.Run(chartReq, mergedValues)
_, err = ou.runChartInstall(client, client.ReleaseName, chartReq, mergedValues, actionConfig)
if err != nil {
return err
}
// wait until the orchestra container is running
err = waitForDeployment(ou, "ouhtml-orchestra-login-portal")
if err != nil {
return err
}
network := mergedValues["network"].(map[string]interface{})
ouHost := network["openunison_host"]
fmt.Printf("OpenUnison is deployed! Visit https://%v/ to login to your cluster!\n", ouHost)
} else {
// deploy the orchestra-login-portal charts
fmt.Println("orchestra-login-portal deployed, upgrading")
client := action.NewUpgrade(actionConfig)
client.Namespace = ou.namespace
chartReq, err := ou.locateChart(ou.orchestraLoginPortalChart, &client.ChartPathOptions, settings)
if err != nil {
return err
}
mergedValues := mergeMaps(chartReq.Values, ou.helmValues)
//_, err = client.Run("orchestra-login-portal", chartReq, mergedValues)
_, err = ou.runChartUpgrade(client, "orchestra-login-portal", chartReq, mergedValues)
if err != nil {
return err
}
// wait until the orchestra container is running
err = waitForDeployment(ou, "ouhtml-orchestra-login-portal")
if err != nil {
return err
}
network := mergedValues["network"].(map[string]interface{})
ouHost := network["openunison_host"]
fmt.Printf("OpenUnison is deployed! Visit https://%v/ to login to your cluster!\n", ouHost)
}
// all done!
return nil
}
func waitForDeployment(ou *OpenUnisonDeployment, deploymentName string) error {
running := false
for i := 0; i < 200; i++ {
fmt.Printf("Checking for the %s %v\n", deploymentName, i)
dep, err := ou.clientset.AppsV1().Deployments(ou.namespace).Get(context.TODO(), deploymentName, metav1.GetOptions{})
if err != nil {
return err
}
labels := ""
for key, value := range dep.Spec.Selector.MatchLabels {
labels = labels + key + "=" + value + ","
}
labels = labels[0 : len(labels)-1]
fmt.Printf("Looking for labels '%v'\n", labels)
options := metav1.ListOptions{
LabelSelector: labels,
}
pods, err := ou.clientset.CoreV1().Pods(ou.namespace).List(context.TODO(), options)
if err != nil {
return err
}
numPods := len(pods.Items)
fmt.Printf("Total Pods : %v, Ready Pods : %v\n", numPods, dep.Status.ReadyReplicas)
if *dep.Spec.Replicas <= dep.Status.ReadyReplicas && int32(numPods) == *dep.Spec.Replicas {
running = true
break
}
time.Sleep(1 * time.Second)
}
if !running {
return fmt.Errorf("Timed out waiting for the openunison operator chart to be deployed")
} else {
fmt.Printf("Deployment %v is Running\n", deploymentName)
}
return nil
}
func (ou *OpenUnisonDeployment) checkNamespace(label string, name string) error {
fmt.Printf("Checking for the %s namespace %s\n", label, name)
_, err := ou.clientset.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{})
if err != nil {
fmt.Printf("%s namespace %s does not exist, creating\n", label, name)
openUnisonNamespace := &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: name, Labels: ou.namespaceLabels}}
_, err = ou.clientset.CoreV1().Namespaces().Create(context.TODO(), openUnisonNamespace, metav1.CreateOptions{})
if err != nil {
return err
}
fmt.Printf("%s namespace %s created\n", label, name)
} else {
fmt.Printf("%s namespace %s already exists\n", label, name)
}
return nil
}
func mergeMaps(base, overlay map[string]interface{}) map[string]interface{} {
out := make(map[string]interface{}, len(base))
for key, value := range base {
out[key] = value
}
for k, v := range overlay {
if v, ok := v.(map[string]interface{}); ok {
if bv, ok := out[k]; ok {
if bv, ok := bv.(map[string]interface{}); ok {
out[k] = mergeMaps(bv, v)
continue
}
}
}
out[k] = v
}
return out
}
07070100000020000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002A00000000openunison-control-0.0.13/openunisonmodel07070100000021000081A400000000000000000000000167FBDA050000010A000000000000000000000000000000000000003500000000openunison-control-0.0.13/openunisonmodel/.gitignore# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof
07070100000022000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000003B00000000openunison-control-0.0.13/openunisonmodel/.swagger-codegen07070100000023000081A400000000000000000000000167FBDA0500000406000000000000000000000000000000000000004200000000openunison-control-0.0.13/openunisonmodel/.swagger-codegen-ignore# Swagger Codegen Ignore
# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md
07070100000024000081A400000000000000000000000167FBDA0500000006000000000000000000000000000000000000004300000000openunison-control-0.0.13/openunisonmodel/.swagger-codegen/VERSION3.0.4207070100000025000081A400000000000000000000000167FBDA0500000047000000000000000000000000000000000000003600000000openunison-control-0.0.13/openunisonmodel/.travis.ymllanguage: go
install:
- go get -d -v .
script:
- go build -v ./
07070100000026000081A400000000000000000000000167FBDA0500000CB9000000000000000000000000000000000000003400000000openunison-control-0.0.13/openunisonmodel/README.md# Go API client for openunisonmodel
OpenUnison ScaleJS Register API
## Overview
This API client was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the [swagger-spec](https://github.com/swagger-api/swagger-spec) from a remote server, you can easily generate an API client.
- API version: v6
- Package version: 1.0.0
- Build package: io.swagger.codegen.v3.generators.go.GoClientCodegen
## Installation
Put the package under your project folder and add the following in import:
```golang
import "./openunisonmodel"
```
## Documentation for API Endpoints
All URIs are relative to */*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
## Documentation For Models
- [OpenUnison](docs/OpenUnison.md)
- [OpenUnisonSpec](docs/OpenUnisonSpec.md)
- [OpenUnisonSpecAnnotations](docs/OpenUnisonSpecAnnotations.md)
- [OpenUnisonSpecDeploymentData](docs/OpenUnisonSpecDeploymentData.md)
- [OpenUnisonSpecDeploymentDataResources](docs/OpenUnisonSpecDeploymentDataResources.md)
- [OpenUnisonSpecDeploymentDataResourcesRequests](docs/OpenUnisonSpecDeploymentDataResourcesRequests.md)
- [OpenUnisonSpecDeploymentDataTokenrequestApi](docs/OpenUnisonSpecDeploymentDataTokenrequestApi.md)
- [OpenUnisonSpecHosts](docs/OpenUnisonSpecHosts.md)
- [OpenUnisonSpecKeyStore](docs/OpenUnisonSpecKeyStore.md)
- [OpenUnisonSpecKeyStoreKeyPairs](docs/OpenUnisonSpecKeyStoreKeyPairs.md)
- [OpenUnisonSpecKeyStoreKeyPairsCreateData](docs/OpenUnisonSpecKeyStoreKeyPairsCreateData.md)
- [OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo](docs/OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo.md)
- [OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo](docs/OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo.md)
- [OpenUnisonSpecKeyStoreKeyPairsKeys](docs/OpenUnisonSpecKeyStoreKeyPairsKeys.md)
- [OpenUnisonSpecKeyStoreStaticKeys](docs/OpenUnisonSpecKeyStoreStaticKeys.md)
- [OpenUnisonSpecKeyStoreTrustedCertificates](docs/OpenUnisonSpecKeyStoreTrustedCertificates.md)
- [OpenUnisonSpecKeyStoreUpdateController](docs/OpenUnisonSpecKeyStoreUpdateController.md)
- [OpenUnisonSpecMapping](docs/OpenUnisonSpecMapping.md)
- [OpenUnisonSpecNames](docs/OpenUnisonSpecNames.md)
- [OpenUnisonSpecOpenshift](docs/OpenUnisonSpecOpenshift.md)
- [OpenUnisonSpecOpenshiftGit](docs/OpenUnisonSpecOpenshiftGit.md)
- [OpenUnisonSpecOpenunisonNetworkConfiguration](docs/OpenUnisonSpecOpenunisonNetworkConfiguration.md)
- [OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages](docs/OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages.md)
- [OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration](docs/OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration.md)
- [OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams](docs/OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams.md)
- [OpenUnisonSpecSamlRemoteIdp](docs/OpenUnisonSpecSamlRemoteIdp.md)
- [OpenUnisonSpecSource](docs/OpenUnisonSpecSource.md)
- [OpenUnisonStatus](docs/OpenUnisonStatus.md)
- [OpenUnisonStatusConditions](docs/OpenUnisonStatusConditions.md)
## Documentation For Authorization
Endpoints do not require authorization.
## Author
07070100000027000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002E00000000openunison-control-0.0.13/openunisonmodel/api07070100000028000081A400000000000000000000000167FBDA0500002CBD000000000000000000000000000000000000003B00000000openunison-control-0.0.13/openunisonmodel/api/swagger.yamlopenapi: 3.0.1
info:
title: OpenUnison CRD
description: OpenUnison ScaleJS Register API
version: v6
servers:
- url: /
paths: {}
components:
schemas:
OpenUnison:
type: object
properties:
spec:
$ref: '#/components/schemas/OpenUnison_spec'
status:
$ref: '#/components/schemas/OpenUnison_status'
OpenUnison_spec_openshift_git:
type: object
properties:
repo:
type: string
branch:
type: string
dir:
type: string
OpenUnison_spec_openshift:
type: object
properties:
git:
$ref: '#/components/schemas/OpenUnison_spec_openshift_git'
builder_image:
type: string
OpenUnison_spec_names:
type: object
properties:
name:
type: string
service_name:
type: string
env_var:
type: string
OpenUnison_spec_annotations:
type: object
properties:
name:
type: string
value:
type: string
OpenUnison_spec_hosts:
type: object
properties:
names:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_names'
ingress_name:
type: string
ingress_type:
type: string
secret_name:
type: string
annotations:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_annotations'
OpenUnison_spec_deployment_data_tokenrequest_api:
type: object
properties:
enabled:
type: boolean
audience:
type: string
expirationSeconds:
type: integer
OpenUnison_spec_deployment_data_resources_requests:
type: object
properties:
memory:
type: string
cpu:
type: string
OpenUnison_spec_deployment_data_resources:
type: object
properties:
requests:
$ref: '#/components/schemas/OpenUnison_spec_deployment_data_resources_requests'
limits:
$ref: '#/components/schemas/OpenUnison_spec_deployment_data_resources_requests'
OpenUnison_spec_deployment_data:
type: object
properties:
tokenrequest_api:
$ref: '#/components/schemas/OpenUnison_spec_deployment_data_tokenrequest_api'
readiness_probe_command:
type: array
items:
type: string
liveness_probe_command:
type: array
items:
type: string
node_selectors:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_annotations'
pull_secret:
type: string
resources:
$ref: '#/components/schemas/OpenUnison_spec_deployment_data_resources'
OpenUnison_spec_openunison_network_configuration_error_pages:
type: object
properties:
code:
type: integer
location:
type: string
OpenUnison_spec_openunison_network_configuration_queue_configuration_params:
type: object
properties:
name:
type: string
source_type:
type: string
enum:
- static
- environment
value:
type: string
OpenUnison_spec_openunison_network_configuration_queue_configuration:
type: object
properties:
use_internal_queue:
type: boolean
max_producers:
type: integer
connection_factory:
type: string
max_consumers:
type: integer
max_sessions_per_connection:
type: integer
task_queue_name:
type: string
smtp_queue_name:
type: string
encryption_key_name:
type: string
num_queues:
type: integer
multi_task_queues:
type: boolean
keep_alive_millis:
type: integer
params:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_openunison_network_configuration_queue_configuration_params'
OpenUnison_spec_openunison_network_configuration:
type: object
properties:
force_to_lower_case:
type: boolean
open_port:
type: integer
open_external_port:
type: integer
secure_port:
type: integer
secure_external_port:
type: integer
ldap_port:
type: integer
ldaps_port:
type: integer
ldaps_key_name:
type: string
force_to_secure:
type: boolean
activemq_dir:
type: string
client_auth:
type: string
allowed_client_names:
type: array
items:
type: string
ciphers:
type: array
items:
type: string
path_to_deployment:
type: string
path_to_env_file:
type: string
secure_key_alias:
type: string
allowed_tls_protocols:
type: array
items:
type: string
quartz_dir:
type: string
context_root:
type: string
disable_http2:
type: boolean
allow_un_escaped_chars:
type: string
welecome_pages:
type: array
items:
type: string
error_pages:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_openunison_network_configuration_error_pages'
redirect_to_context_root:
type: boolean
queue_configuration:
$ref: '#/components/schemas/OpenUnison_spec_openunison_network_configuration_queue_configuration'
OpenUnison_spec_source:
type: object
properties:
url:
type: string
xml:
type: string
OpenUnison_spec_mapping:
type: object
properties:
entity_id:
type: string
post_url:
type: string
redirect_url:
type: string
logout_url:
type: string
signing_cert_alias:
type: string
encryption_cert_alias:
type: string
OpenUnison_spec_saml_remote_idp:
type: object
properties:
source:
$ref: '#/components/schemas/OpenUnison_spec_source'
mapping:
$ref: '#/components/schemas/OpenUnison_spec_mapping'
OpenUnison_spec_key_store_update_controller:
type: object
properties:
image:
type: string
schedule:
type: string
days_to_expire:
type: integer
OpenUnison_spec_key_store_static_keys:
type: object
properties:
name:
type: string
version:
type: integer
OpenUnison_spec_key_store_trusted_certificates:
type: object
properties:
name:
type: string
pem_data:
type: string
OpenUnison_spec_key_store_key_pairs_create_data_patch_info:
type: object
properties:
url:
type: string
annotation_name:
type: string
OpenUnison_spec_key_store_key_pairs_create_data_secret_info:
type: object
properties:
type_of_secret:
type: string
cert_name:
type: string
key_name:
type: string
OpenUnison_spec_key_store_key_pairs_create_data:
type: object
properties:
target_namespace:
type: string
sign_by_k8s_ca:
type: boolean
server_name:
type: string
subject_alternative_names:
type: array
items:
type: string
key_size:
type: integer
ca_cert:
type: boolean
delete_pods_labels:
type: array
items:
type: string
patch_info:
$ref: '#/components/schemas/OpenUnison_spec_key_store_key_pairs_create_data_patch_info'
secret_info:
$ref: '#/components/schemas/OpenUnison_spec_key_store_key_pairs_create_data_secret_info'
OpenUnison_spec_key_store_key_pairs_keys:
type: object
properties:
name:
type: string
tls_secret_name:
type: string
import_into_ks:
type: string
enum:
- keypair
- certificate
- none
replace_if_exists:
type: boolean
create_data:
$ref: '#/components/schemas/OpenUnison_spec_key_store_key_pairs_create_data'
OpenUnison_spec_key_store_key_pairs:
type: object
properties:
create_keypair_template:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_annotations'
keys:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_key_store_key_pairs_keys'
OpenUnison_spec_key_store:
type: object
properties:
update_controller:
$ref: '#/components/schemas/OpenUnison_spec_key_store_update_controller'
static_keys:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_key_store_static_keys'
trusted_certificates:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_key_store_trusted_certificates'
key_pairs:
$ref: '#/components/schemas/OpenUnison_spec_key_store_key_pairs'
OpenUnison_spec:
type: object
properties:
image:
type: string
replicas:
type: integer
enable_activemq:
type: boolean
activemq_image:
type: string
dest_secret:
type: string
source_secret:
type: string
secret_data:
type: array
items:
type: string
myvd_configmap:
type: string
openshift:
$ref: '#/components/schemas/OpenUnison_spec_openshift'
hosts:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_hosts'
deployment_data:
$ref: '#/components/schemas/OpenUnison_spec_deployment_data'
non_secret_data:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_annotations'
openunison_network_configuration:
$ref: '#/components/schemas/OpenUnison_spec_openunison_network_configuration'
saml_remote_idp:
type: array
items:
$ref: '#/components/schemas/OpenUnison_spec_saml_remote_idp'
run_sql:
type: string
sql_check_query:
type: string
key_store:
$ref: '#/components/schemas/OpenUnison_spec_key_store'
OpenUnison_status_conditions:
type: object
properties:
lastTransitionTime:
type: string
status:
type: string
type:
type: string
OpenUnison_status:
type: object
properties:
conditions:
$ref: '#/components/schemas/OpenUnison_status_conditions'
digest:
type: string
idpCertificateFingerprints:
type: object
additionalProperties: true
x-original-swagger-version: "2.0"
07070100000029000081A400000000000000000000000167FBDA0500002D52000000000000000000000000000000000000003400000000openunison-control-0.0.13/openunisonmodel/client.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
import (
"bytes"
"context"
"encoding/json"
"encoding/xml"
"errors"
"fmt"
"io"
"mime/multipart"
"net/http"
"net/url"
"os"
"path/filepath"
"reflect"
"regexp"
"strconv"
"strings"
"time"
"unicode/utf8"
"golang.org/x/oauth2"
)
var (
jsonCheck = regexp.MustCompile("(?i:[application|text]/json)")
xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)")
)
// APIClient manages communication with the OpenUnison CRD API vv6
// In most cases there should be only one, shared, APIClient.
type APIClient struct {
cfg *Configuration
common service // Reuse a single struct instead of allocating one for each service on the heap.
// API Services
}
type service struct {
client *APIClient
}
// NewAPIClient creates a new API client. Requires a userAgent string describing your application.
// optionally a custom http.Client to allow for advanced features such as caching.
func NewAPIClient(cfg *Configuration) *APIClient {
if cfg.HTTPClient == nil {
cfg.HTTPClient = http.DefaultClient
}
c := &APIClient{}
c.cfg = cfg
c.common.client = c
// API Services
return c
}
func atoi(in string) (int, error) {
return strconv.Atoi(in)
}
// selectHeaderContentType select a content type from the available list.
func selectHeaderContentType(contentTypes []string) string {
if len(contentTypes) == 0 {
return ""
}
if contains(contentTypes, "application/json") {
return "application/json"
}
return contentTypes[0] // use the first content type specified in 'consumes'
}
// selectHeaderAccept join all accept types and return
func selectHeaderAccept(accepts []string) string {
if len(accepts) == 0 {
return ""
}
if contains(accepts, "application/json") {
return "application/json"
}
return strings.Join(accepts, ",")
}
// contains is a case insenstive match, finding needle in a haystack
func contains(haystack []string, needle string) bool {
for _, a := range haystack {
if strings.ToLower(a) == strings.ToLower(needle) {
return true
}
}
return false
}
// Verify optional parameters are of the correct type.
func typeCheckParameter(obj interface{}, expected string, name string) error {
// Make sure there is an object.
if obj == nil {
return nil
}
// Check the type is as expected.
if reflect.TypeOf(obj).String() != expected {
return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String())
}
return nil
}
// parameterToString convert interface{} parameters to string, using a delimiter if format is provided.
func parameterToString(obj interface{}, collectionFormat string) string {
var delimiter string
switch collectionFormat {
case "pipes":
delimiter = "|"
case "ssv":
delimiter = " "
case "tsv":
delimiter = "\t"
case "csv":
delimiter = ","
}
if reflect.TypeOf(obj).Kind() == reflect.Slice {
return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]")
}
return fmt.Sprintf("%v", obj)
}
// callAPI do the request.
func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) {
return c.cfg.HTTPClient.Do(request)
}
// Change base path to allow switching to mocks
func (c *APIClient) ChangeBasePath(path string) {
c.cfg.BasePath = path
}
// prepareRequest build the request
func (c *APIClient) prepareRequest(
ctx context.Context,
path string, method string,
postBody interface{},
headerParams map[string]string,
queryParams url.Values,
formParams url.Values,
fileName string,
fileBytes []byte) (localVarRequest *http.Request, err error) {
var body *bytes.Buffer
// Detect postBody type and post.
if postBody != nil {
contentType := headerParams["Content-Type"]
if contentType == "" {
contentType = detectContentType(postBody)
headerParams["Content-Type"] = contentType
}
body, err = setBody(postBody, contentType)
if err != nil {
return nil, err
}
}
// add form parameters and file if available.
if strings.HasPrefix(headerParams["Content-Type"], "multipart/form-data") && len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") {
if body != nil {
return nil, errors.New("Cannot specify postBody and multipart form at the same time.")
}
body = &bytes.Buffer{}
w := multipart.NewWriter(body)
for k, v := range formParams {
for _, iv := range v {
if strings.HasPrefix(k, "@") { // file
err = addFile(w, k[1:], iv)
if err != nil {
return nil, err
}
} else { // form value
w.WriteField(k, iv)
}
}
}
if len(fileBytes) > 0 && fileName != "" {
w.Boundary()
//_, fileNm := filepath.Split(fileName)
part, err := w.CreateFormFile("file", filepath.Base(fileName))
if err != nil {
return nil, err
}
_, err = part.Write(fileBytes)
if err != nil {
return nil, err
}
// Set the Boundary in the Content-Type
headerParams["Content-Type"] = w.FormDataContentType()
}
// Set Content-Length
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
w.Close()
}
if strings.HasPrefix(headerParams["Content-Type"], "application/x-www-form-urlencoded") && len(formParams) > 0 {
if body != nil {
return nil, errors.New("Cannot specify postBody and x-www-form-urlencoded form at the same time.")
}
body = &bytes.Buffer{}
body.WriteString(formParams.Encode())
// Set Content-Length
headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len())
}
// Setup path and query parameters
url, err := url.Parse(path)
if err != nil {
return nil, err
}
// Adding Query Param
query := url.Query()
for k, v := range queryParams {
for _, iv := range v {
query.Add(k, iv)
}
}
// Encode the parameters.
url.RawQuery = query.Encode()
// Generate a new request
if body != nil {
localVarRequest, err = http.NewRequest(method, url.String(), body)
} else {
localVarRequest, err = http.NewRequest(method, url.String(), nil)
}
if err != nil {
return nil, err
}
// add header parameters, if any
if len(headerParams) > 0 {
headers := http.Header{}
for h, v := range headerParams {
headers.Set(h, v)
}
localVarRequest.Header = headers
}
// Override request host, if applicable
if c.cfg.Host != "" {
localVarRequest.Host = c.cfg.Host
}
// Add the user agent to the request.
localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent)
if ctx != nil {
// add context to the request
localVarRequest = localVarRequest.WithContext(ctx)
// Walk through any authentication.
// OAuth2 authentication
if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok {
// We were able to grab an oauth2 token from the context
var latestToken *oauth2.Token
if latestToken, err = tok.Token(); err != nil {
return nil, err
}
latestToken.SetAuthHeader(localVarRequest)
}
// Basic HTTP Authentication
if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok {
localVarRequest.SetBasicAuth(auth.UserName, auth.Password)
}
// AccessToken Authentication
if auth, ok := ctx.Value(ContextAccessToken).(string); ok {
localVarRequest.Header.Add("Authorization", "Bearer "+auth)
}
}
for header, value := range c.cfg.DefaultHeader {
localVarRequest.Header.Add(header, value)
}
return localVarRequest, nil
}
func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) {
if strings.Contains(contentType, "application/xml") {
if err = xml.Unmarshal(b, v); err != nil {
return err
}
return nil
} else if strings.Contains(contentType, "application/json") {
if err = json.Unmarshal(b, v); err != nil {
return err
}
return nil
}
return errors.New("undefined response type")
}
// Add a file to the multipart request
func addFile(w *multipart.Writer, fieldName, path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
part, err := w.CreateFormFile(fieldName, filepath.Base(path))
if err != nil {
return err
}
_, err = io.Copy(part, file)
return err
}
// Prevent trying to import "fmt"
func reportError(format string, a ...interface{}) error {
return fmt.Errorf(format, a...)
}
// Set request body from an interface{}
func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) {
if bodyBuf == nil {
bodyBuf = &bytes.Buffer{}
}
if reader, ok := body.(io.Reader); ok {
_, err = bodyBuf.ReadFrom(reader)
} else if b, ok := body.([]byte); ok {
_, err = bodyBuf.Write(b)
} else if s, ok := body.(string); ok {
_, err = bodyBuf.WriteString(s)
} else if s, ok := body.(*string); ok {
_, err = bodyBuf.WriteString(*s)
} else if jsonCheck.MatchString(contentType) {
err = json.NewEncoder(bodyBuf).Encode(body)
} else if xmlCheck.MatchString(contentType) {
xml.NewEncoder(bodyBuf).Encode(body)
}
if err != nil {
return nil, err
}
if bodyBuf.Len() == 0 {
err = fmt.Errorf("Invalid body type %s\n", contentType)
return nil, err
}
return bodyBuf, nil
}
// detectContentType method is used to figure out `Request.Body` content type for request header
func detectContentType(body interface{}) string {
contentType := "text/plain; charset=utf-8"
kind := reflect.TypeOf(body).Kind()
switch kind {
case reflect.Struct, reflect.Map, reflect.Ptr:
contentType = "application/json; charset=utf-8"
case reflect.String:
contentType = "text/plain; charset=utf-8"
default:
if b, ok := body.([]byte); ok {
contentType = http.DetectContentType(b)
} else if kind == reflect.Slice {
contentType = "application/json; charset=utf-8"
}
}
return contentType
}
// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go
type cacheControl map[string]string
func parseCacheControl(headers http.Header) cacheControl {
cc := cacheControl{}
ccHeader := headers.Get("Cache-Control")
for _, part := range strings.Split(ccHeader, ",") {
part = strings.Trim(part, " ")
if part == "" {
continue
}
if strings.ContainsRune(part, '=') {
keyval := strings.Split(part, "=")
cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",")
} else {
cc[part] = ""
}
}
return cc
}
// CacheExpires helper function to determine remaining time before repeating a request.
func CacheExpires(r *http.Response) time.Time {
// Figure out when the cache expires.
var expires time.Time
now, err := time.Parse(time.RFC1123, r.Header.Get("date"))
if err != nil {
return time.Now()
}
respCacheControl := parseCacheControl(r.Header)
if maxAge, ok := respCacheControl["max-age"]; ok {
lifetime, err := time.ParseDuration(maxAge + "s")
if err != nil {
expires = now
}
expires = now.Add(lifetime)
} else {
expiresHeader := r.Header.Get("Expires")
if expiresHeader != "" {
expires, err = time.Parse(time.RFC1123, expiresHeader)
if err != nil {
expires = now
}
}
}
return expires
}
func strlen(s string) int {
return utf8.RuneCountInString(s)
}
// GenericSwaggerError Provides access to the body, error and model on returned errors.
type GenericSwaggerError struct {
body []byte
error string
model interface{}
}
// Error returns non-empty string if there was an error.
func (e GenericSwaggerError) Error() string {
return e.error
}
// Body returns the raw bytes of the response
func (e GenericSwaggerError) Body() []byte {
return e.body
}
// Model returns the unpacked model of the error
func (e GenericSwaggerError) Model() interface{} {
return e.model
}
0707010000002A000081A400000000000000000000000167FBDA05000007F8000000000000000000000000000000000000003B00000000openunison-control-0.0.13/openunisonmodel/configuration.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
import (
"net/http"
)
// contextKeys are used to identify the type of value in the context.
// Since these are string, it is possible to get a short description of the
// context key for logging and debugging using key.String().
type contextKey string
func (c contextKey) String() string {
return "auth " + string(c)
}
var (
// ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.
ContextOAuth2 = contextKey("token")
// ContextBasicAuth takes BasicAuth as authentication for the request.
ContextBasicAuth = contextKey("basic")
// ContextAccessToken takes a string oauth2 access token as authentication for the request.
ContextAccessToken = contextKey("accesstoken")
// ContextAPIKey takes an APIKey as authentication for the request
ContextAPIKey = contextKey("apikey")
)
// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
type BasicAuth struct {
UserName string `json:"userName,omitempty"`
Password string `json:"password,omitempty"`
}
// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
type APIKey struct {
Key string
Prefix string
}
type Configuration struct {
BasePath string `json:"basePath,omitempty"`
Host string `json:"host,omitempty"`
Scheme string `json:"scheme,omitempty"`
DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
UserAgent string `json:"userAgent,omitempty"`
HTTPClient *http.Client
}
func NewConfiguration() *Configuration {
cfg := &Configuration{
BasePath: "/",
DefaultHeader: make(map[string]string),
UserAgent: "Swagger-Codegen/1.0.0/go",
}
return cfg
}
func (c *Configuration) AddDefaultHeader(key string, value string) {
c.DefaultHeader[key] = value
}
0707010000002B000041ED00000000000000000000000267FBDA0500000000000000000000000000000000000000000000002F00000000openunison-control-0.0.13/openunisonmodel/docs0707010000002C000081A400000000000000000000000167FBDA05000001D3000000000000000000000000000000000000003D00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnison.md# OpenUnison
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Spec** | [***OpenUnisonSpec**](OpenUnison_spec.md) | | [optional] [default to null]
**Status** | [***OpenUnisonStatus**](OpenUnison_status.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000002D000081A400000000000000000000000167FBDA05000006F7000000000000000000000000000000000000004100000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpec.md# OpenUnisonSpec
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Image** | **string** | | [optional] [default to null]
**Replicas** | **int32** | | [optional] [default to null]
**EnableActivemq** | **bool** | | [optional] [default to null]
**ActivemqImage** | **string** | | [optional] [default to null]
**DestSecret** | **string** | | [optional] [default to null]
**SourceSecret** | **string** | | [optional] [default to null]
**SecretData** | **[]string** | | [optional] [default to null]
**MyvdConfigmap** | **string** | | [optional] [default to null]
**Openshift** | [***OpenUnisonSpecOpenshift**](OpenUnison_spec_openshift.md) | | [optional] [default to null]
**Hosts** | [**[]OpenUnisonSpecHosts**](OpenUnison_spec_hosts.md) | | [optional] [default to null]
**DeploymentData** | [***OpenUnisonSpecDeploymentData**](OpenUnison_spec_deployment_data.md) | | [optional] [default to null]
**NonSecretData** | [**[]OpenUnisonSpecAnnotations**](OpenUnison_spec_annotations.md) | | [optional] [default to null]
**OpenunisonNetworkConfiguration** | [***OpenUnisonSpecOpenunisonNetworkConfiguration**](OpenUnison_spec_openunison_network_configuration.md) | | [optional] [default to null]
**SamlRemoteIdp** | [**[]OpenUnisonSpecSamlRemoteIdp**](OpenUnison_spec_saml_remote_idp.md) | | [optional] [default to null]
**RunSql** | **string** | | [optional] [default to null]
**SqlCheckQuery** | **string** | | [optional] [default to null]
**KeyStore** | [***OpenUnisonSpecKeyStore**](OpenUnison_spec_key_store.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000002E000081A400000000000000000000000167FBDA050000019F000000000000000000000000000000000000004C00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecAnnotations.md# OpenUnisonSpecAnnotations
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**Value** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000002F000081A400000000000000000000000167FBDA05000003A9000000000000000000000000000000000000004F00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecDeploymentData.md# OpenUnisonSpecDeploymentData
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**TokenrequestApi** | [***OpenUnisonSpecDeploymentDataTokenrequestApi**](OpenUnison_spec_deployment_data_tokenrequest_api.md) | | [optional] [default to null]
**ReadinessProbeCommand** | **[]string** | | [optional] [default to null]
**LivenessProbeCommand** | **[]string** | | [optional] [default to null]
**NodeSelectors** | [**[]OpenUnisonSpecAnnotations**](OpenUnison_spec_annotations.md) | | [optional] [default to null]
**PullSecret** | **string** | | [optional] [default to null]
**Resources** | [***OpenUnisonSpecDeploymentDataResources**](OpenUnison_spec_deployment_data_resources.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000030000081A400000000000000000000000167FBDA0500000272000000000000000000000000000000000000005800000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecDeploymentDataResources.md# OpenUnisonSpecDeploymentDataResources
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Requests** | [***OpenUnisonSpecDeploymentDataResourcesRequests**](OpenUnison_spec_deployment_data_resources_requests.md) | | [optional] [default to null]
**Limits** | [***OpenUnisonSpecDeploymentDataResourcesRequests**](OpenUnison_spec_deployment_data_resources_requests.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000031000081A400000000000000000000000167FBDA05000001B3000000000000000000000000000000000000006000000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecDeploymentDataResourcesRequests.md# OpenUnisonSpecDeploymentDataResourcesRequests
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Memory** | **string** | | [optional] [default to null]
**Cpu** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000032000081A400000000000000000000000167FBDA05000001F9000000000000000000000000000000000000005E00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecDeploymentDataTokenrequestApi.md# OpenUnisonSpecDeploymentDataTokenrequestApi
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Enabled** | **bool** | | [optional] [default to null]
**Audience** | **string** | | [optional] [default to null]
**ExpirationSeconds** | **int32** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000033000081A400000000000000000000000167FBDA05000002BE000000000000000000000000000000000000004600000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecHosts.md# OpenUnisonSpecHosts
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Names** | [**[]OpenUnisonSpecNames**](OpenUnison_spec_names.md) | | [optional] [default to null]
**IngressName** | **string** | | [optional] [default to null]
**IngressType** | **string** | | [optional] [default to null]
**SecretName** | **string** | | [optional] [default to null]
**Annotations** | [**[]OpenUnisonSpecAnnotations**](OpenUnison_spec_annotations.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000034000081A400000000000000000000000167FBDA0500000368000000000000000000000000000000000000004900000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStore.md# OpenUnisonSpecKeyStore
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**UpdateController** | [***OpenUnisonSpecKeyStoreUpdateController**](OpenUnison_spec_key_store_update_controller.md) | | [optional] [default to null]
**StaticKeys** | [**[]OpenUnisonSpecKeyStoreStaticKeys**](OpenUnison_spec_key_store_static_keys.md) | | [optional] [default to null]
**TrustedCertificates** | [**[]OpenUnisonSpecKeyStoreTrustedCertificates**](OpenUnison_spec_key_store_trusted_certificates.md) | | [optional] [default to null]
**KeyPairs** | [***OpenUnisonSpecKeyStoreKeyPairs**](OpenUnison_spec_key_store_key_pairs.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000035000081A400000000000000000000000167FBDA0500000238000000000000000000000000000000000000005100000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreKeyPairs.md# OpenUnisonSpecKeyStoreKeyPairs
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**CreateKeypairTemplate** | [**[]OpenUnisonSpecAnnotations**](OpenUnison_spec_annotations.md) | | [optional] [default to null]
**Keys** | [**[]OpenUnisonSpecKeyStoreKeyPairsKeys**](OpenUnison_spec_key_store_key_pairs_keys.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000036000081A400000000000000000000000167FBDA0500000457000000000000000000000000000000000000005B00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreKeyPairsCreateData.md# OpenUnisonSpecKeyStoreKeyPairsCreateData
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**TargetNamespace** | **string** | | [optional] [default to null]
**SignByK8sCa** | **bool** | | [optional] [default to null]
**ServerName** | **string** | | [optional] [default to null]
**SubjectAlternativeNames** | **[]string** | | [optional] [default to null]
**KeySize** | **int32** | | [optional] [default to null]
**CaCert** | **bool** | | [optional] [default to null]
**DeletePodsLabels** | **[]string** | | [optional] [default to null]
**PatchInfo** | [***OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo**](OpenUnison_spec_key_store_key_pairs_create_data_patch_info.md) | | [optional] [default to null]
**SecretInfo** | [***OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo**](OpenUnison_spec_key_store_key_pairs_create_data_secret_info.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000037000081A400000000000000000000000167FBDA05000001BF000000000000000000000000000000000000006400000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo.md# OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Url** | **string** | | [optional] [default to null]
**AnnotationName** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000038000081A400000000000000000000000167FBDA05000001FE000000000000000000000000000000000000006500000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo.md# OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**TypeOfSecret** | **string** | | [optional] [default to null]
**CertName** | **string** | | [optional] [default to null]
**KeyName** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000039000081A400000000000000000000000167FBDA05000002C8000000000000000000000000000000000000005500000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreKeyPairsKeys.md# OpenUnisonSpecKeyStoreKeyPairsKeys
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**TlsSecretName** | **string** | | [optional] [default to null]
**ImportIntoKs** | **string** | | [optional] [default to null]
**ReplaceIfExists** | **bool** | | [optional] [default to null]
**CreateData** | [***OpenUnisonSpecKeyStoreKeyPairsCreateData**](OpenUnison_spec_key_store_key_pairs_create_data.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000003A000081A400000000000000000000000167FBDA05000001A7000000000000000000000000000000000000005300000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreStaticKeys.md# OpenUnisonSpecKeyStoreStaticKeys
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**Version** | **int32** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000003B000081A400000000000000000000000167FBDA05000001B1000000000000000000000000000000000000005C00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreTrustedCertificates.md# OpenUnisonSpecKeyStoreTrustedCertificates
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**PemData** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000003C000081A400000000000000000000000167FBDA05000001EF000000000000000000000000000000000000005900000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecKeyStoreUpdateController.md# OpenUnisonSpecKeyStoreUpdateController
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Image** | **string** | | [optional] [default to null]
**Schedule** | **string** | | [optional] [default to null]
**DaysToExpire** | **int32** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000003D000081A400000000000000000000000167FBDA05000002A8000000000000000000000000000000000000004800000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecMapping.md# OpenUnisonSpecMapping
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**EntityId** | **string** | | [optional] [default to null]
**PostUrl** | **string** | | [optional] [default to null]
**RedirectUrl** | **string** | | [optional] [default to null]
**LogoutUrl** | **string** | | [optional] [default to null]
**SigningCertAlias** | **string** | | [optional] [default to null]
**EncryptionCertAlias** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000003E000081A400000000000000000000000167FBDA05000001D9000000000000000000000000000000000000004600000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecNames.md# OpenUnisonSpecNames
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**ServiceName** | **string** | | [optional] [default to null]
**EnvVar** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
0707010000003F000081A400000000000000000000000167FBDA05000001DC000000000000000000000000000000000000004A00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecOpenshift.md# OpenUnisonSpecOpenshift
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Git** | [***OpenUnisonSpecOpenshiftGit**](OpenUnison_spec_openshift_git.md) | | [optional] [default to null]
**BuilderImage** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000040000081A400000000000000000000000167FBDA05000001D8000000000000000000000000000000000000004D00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecOpenshiftGit.md# OpenUnisonSpecOpenshiftGit
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Repo** | **string** | | [optional] [default to null]
**Branch** | **string** | | [optional] [default to null]
**Dir** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000041000081A400000000000000000000000167FBDA0500000893000000000000000000000000000000000000005F00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecOpenunisonNetworkConfiguration.md# OpenUnisonSpecOpenunisonNetworkConfiguration
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**ForceToLowerCase** | **bool** | | [optional] [default to null]
**OpenPort** | **int32** | | [optional] [default to null]
**OpenExternalPort** | **int32** | | [optional] [default to null]
**SecurePort** | **int32** | | [optional] [default to null]
**SecureExternalPort** | **int32** | | [optional] [default to null]
**LdapPort** | **int32** | | [optional] [default to null]
**LdapsPort** | **int32** | | [optional] [default to null]
**LdapsKeyName** | **string** | | [optional] [default to null]
**ForceToSecure** | **bool** | | [optional] [default to null]
**ActivemqDir** | **string** | | [optional] [default to null]
**ClientAuth** | **string** | | [optional] [default to null]
**AllowedClientNames** | **[]string** | | [optional] [default to null]
**Ciphers** | **[]string** | | [optional] [default to null]
**PathToDeployment** | **string** | | [optional] [default to null]
**PathToEnvFile** | **string** | | [optional] [default to null]
**SecureKeyAlias** | **string** | | [optional] [default to null]
**AllowedTlsProtocols** | **[]string** | | [optional] [default to null]
**QuartzDir** | **string** | | [optional] [default to null]
**ContextRoot** | **string** | | [optional] [default to null]
**DisableHttp2** | **bool** | | [optional] [default to null]
**AllowUnEscapedChars** | **string** | | [optional] [default to null]
**WelecomePages** | **[]string** | | [optional] [default to null]
**ErrorPages** | [**[]OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages**](OpenUnison_spec_openunison_network_configuration_error_pages.md) | | [optional] [default to null]
**RedirectToContextRoot** | **bool** | | [optional] [default to null]
**QueueConfiguration** | [***OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration**](OpenUnison_spec_openunison_network_configuration_queue_configuration.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000042000081A400000000000000000000000167FBDA05000001BE000000000000000000000000000000000000006900000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages.md# OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Code** | **int32** | | [optional] [default to null]
**Location** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000043000081A400000000000000000000000167FBDA05000004F5000000000000000000000000000000000000007100000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration.md# OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**UseInternalQueue** | **bool** | | [optional] [default to null]
**MaxProducers** | **int32** | | [optional] [default to null]
**ConnectionFactory** | **string** | | [optional] [default to null]
**MaxConsumers** | **int32** | | [optional] [default to null]
**MaxSessionsPerConnection** | **int32** | | [optional] [default to null]
**TaskQueueName** | **string** | | [optional] [default to null]
**SmtpQueueName** | **string** | | [optional] [default to null]
**EncryptionKeyName** | **string** | | [optional] [default to null]
**NumQueues** | **int32** | | [optional] [default to null]
**MultiTaskQueues** | **bool** | | [optional] [default to null]
**KeepAliveMillis** | **int32** | | [optional] [default to null]
**Params** | [**[]OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams**](OpenUnison_spec_openunison_network_configuration_queue_configuration_params.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000044000081A400000000000000000000000167FBDA0500000208000000000000000000000000000000000000007700000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams.md# OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Name** | **string** | | [optional] [default to null]
**SourceType** | **string** | | [optional] [default to null]
**Value** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000045000081A400000000000000000000000167FBDA05000001FF000000000000000000000000000000000000004E00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecSamlRemoteIdp.md# OpenUnisonSpecSamlRemoteIdp
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Source** | [***OpenUnisonSpecSource**](OpenUnison_spec_source.md) | | [optional] [default to null]
**Mapping** | [***OpenUnisonSpecMapping**](OpenUnison_spec_mapping.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000046000081A400000000000000000000000167FBDA0500000197000000000000000000000000000000000000004700000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonSpecSource.md# OpenUnisonSpecSource
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Url** | **string** | | [optional] [default to null]
**Xml** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000047000081A400000000000000000000000167FBDA0500000237000000000000000000000000000000000000004300000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonStatus.md# OpenUnisonStatus
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Conditions** | [***OpenUnisonStatusConditions**](OpenUnison_status_conditions.md) | | [optional] [default to null]
**Digest** | **string** | | [optional] [default to null]
**IdpCertificateFingerprints** | [**ModelMap**](interface{}.md) | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000048000081A400000000000000000000000167FBDA05000001E8000000000000000000000000000000000000004D00000000openunison-control-0.0.13/openunisonmodel/docs/OpenUnisonStatusConditions.md# OpenUnisonStatusConditions
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**LastTransitionTime** | **string** | | [optional] [default to null]
**Status** | **string** | | [optional] [default to null]
**Type_** | **string** | | [optional] [default to null]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
07070100000049000081A400000000000000000000000167FBDA050000067F000000000000000000000000000000000000003600000000openunison-control-0.0.13/openunisonmodel/git_push.sh#!/bin/sh
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
#
# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update"
git_user_id=$1
git_repo_id=$2
release_note=$3
if [ "$git_user_id" = "" ]; then
git_user_id="GIT_USER_ID"
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
fi
if [ "$git_repo_id" = "" ]; then
git_repo_id="GIT_REPO_ID"
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
fi
if [ "$release_note" = "" ]; then
release_note="Minor update"
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
fi
# Initialize the local directory as a Git repository
git init
# Adds the files in the local repository and stages them for commit.
git add .
# Commits the tracked changes and prepares them to be pushed to a remote repository.
git commit -m "$release_note"
# Sets the new remote
git_remote=`git remote`
if [ "$git_remote" = "" ]; then # git remote not defined
if [ "$GIT_TOKEN" = "" ]; then
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git
else
git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git
fi
fi
git pull origin master
# Pushes (Forces) the changes in the local repository up to the remote repository
echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git"
git push origin master 2>&1 | grep -v 'To https'
0707010000004A000081A400000000000000000000000167FBDA0500000141000000000000000000000000000000000000003F00000000openunison-control-0.0.13/openunisonmodel/model_open_unison.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnison struct {
Spec *OpenUnisonSpec `json:"spec,omitempty"`
Status *OpenUnisonStatus `json:"status,omitempty"`
}
0707010000004B000081A400000000000000000000000167FBDA0500000504000000000000000000000000000000000000004400000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpec struct {
Image string `json:"image,omitempty"`
Replicas int32 `json:"replicas,omitempty"`
EnableActivemq bool `json:"enable_activemq,omitempty"`
ActivemqImage string `json:"activemq_image,omitempty"`
DestSecret string `json:"dest_secret,omitempty"`
SourceSecret string `json:"source_secret,omitempty"`
SecretData []string `json:"secret_data,omitempty"`
MyvdConfigmap string `json:"myvd_configmap,omitempty"`
Openshift *OpenUnisonSpecOpenshift `json:"openshift,omitempty"`
Hosts []OpenUnisonSpecHosts `json:"hosts,omitempty"`
DeploymentData *OpenUnisonSpecDeploymentData `json:"deployment_data,omitempty"`
NonSecretData []OpenUnisonSpecAnnotations `json:"non_secret_data,omitempty"`
OpenunisonNetworkConfiguration *OpenUnisonSpecOpenunisonNetworkConfiguration `json:"openunison_network_configuration,omitempty"`
SamlRemoteIdp []OpenUnisonSpecSamlRemoteIdp `json:"saml_remote_idp,omitempty"`
RunSql string `json:"run_sql,omitempty"`
SqlCheckQuery string `json:"sql_check_query,omitempty"`
KeyStore *OpenUnisonSpecKeyStore `json:"key_store,omitempty"`
}
0707010000004C000081A400000000000000000000000167FBDA050000013A000000000000000000000000000000000000005000000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_annotations.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecAnnotations struct {
Name string `json:"name,omitempty"`
Value string `json:"value,omitempty"`
}
0707010000004D000081A400000000000000000000000167FBDA05000002B5000000000000000000000000000000000000005400000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_deployment_data.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecDeploymentData struct {
TokenrequestApi *OpenUnisonSpecDeploymentDataTokenrequestApi `json:"tokenrequest_api,omitempty"`
ReadinessProbeCommand []string `json:"readiness_probe_command,omitempty"`
LivenessProbeCommand []string `json:"liveness_probe_command,omitempty"`
NodeSelectors []OpenUnisonSpecAnnotations `json:"node_selectors,omitempty"`
PullSecret string `json:"pull_secret,omitempty"`
Resources *OpenUnisonSpecDeploymentDataResources `json:"resources,omitempty"`
}
0707010000004E000081A400000000000000000000000167FBDA05000001A0000000000000000000000000000000000000005E00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_deployment_data_resources.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecDeploymentDataResources struct {
Requests *OpenUnisonSpecDeploymentDataResourcesRequests `json:"requests,omitempty"`
Limits *OpenUnisonSpecDeploymentDataResourcesRequests `json:"limits,omitempty"`
}
0707010000004F000081A400000000000000000000000167FBDA050000014E000000000000000000000000000000000000006700000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_deployment_data_resources_requests.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecDeploymentDataResourcesRequests struct {
Memory string `json:"memory,omitempty"`
Cpu string `json:"cpu,omitempty"`
}
07070100000050000081A400000000000000000000000167FBDA0500000194000000000000000000000000000000000000006500000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_deployment_data_tokenrequest_api.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecDeploymentDataTokenrequestApi struct {
Enabled bool `json:"enabled,omitempty"`
Audience string `json:"audience,omitempty"`
ExpirationSeconds int32 `json:"expirationSeconds,omitempty"`
}
07070100000051000081A400000000000000000000000167FBDA0500000200000000000000000000000000000000000000004A00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_hosts.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecHosts struct {
Names []OpenUnisonSpecNames `json:"names,omitempty"`
IngressName string `json:"ingress_name,omitempty"`
IngressType string `json:"ingress_type,omitempty"`
SecretName string `json:"secret_name,omitempty"`
Annotations []OpenUnisonSpecAnnotations `json:"annotations,omitempty"`
}
07070100000052000081A400000000000000000000000167FBDA0500000248000000000000000000000000000000000000004E00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStore struct {
UpdateController *OpenUnisonSpecKeyStoreUpdateController `json:"update_controller,omitempty"`
StaticKeys []OpenUnisonSpecKeyStoreStaticKeys `json:"static_keys,omitempty"`
TrustedCertificates []OpenUnisonSpecKeyStoreTrustedCertificates `json:"trusted_certificates,omitempty"`
KeyPairs *OpenUnisonSpecKeyStoreKeyPairs `json:"key_pairs,omitempty"`
}
07070100000053000081A400000000000000000000000167FBDA0500000194000000000000000000000000000000000000005800000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_key_pairs.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreKeyPairs struct {
CreateKeypairTemplate []OpenUnisonSpecAnnotations `json:"create_keypair_template,omitempty"`
Keys []OpenUnisonSpecKeyStoreKeyPairsKeys `json:"keys,omitempty"`
}
07070100000054000081A400000000000000000000000167FBDA050000033D000000000000000000000000000000000000006400000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_key_pairs_create_data.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreKeyPairsCreateData struct {
TargetNamespace string `json:"target_namespace,omitempty"`
SignByK8sCa bool `json:"sign_by_k8s_ca,omitempty"`
ServerName string `json:"server_name,omitempty"`
SubjectAlternativeNames []string `json:"subject_alternative_names,omitempty"`
KeySize int32 `json:"key_size,omitempty"`
CaCert bool `json:"ca_cert,omitempty"`
DeletePodsLabels []string `json:"delete_pods_labels,omitempty"`
PatchInfo *OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo `json:"patch_info,omitempty"`
SecretInfo *OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo `json:"secret_info,omitempty"`
}
07070100000055000081A400000000000000000000000167FBDA0500000163000000000000000000000000000000000000006F00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_key_pairs_create_data_patch_info.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreKeyPairsCreateDataPatchInfo struct {
Url string `json:"url,omitempty"`
AnnotationName string `json:"annotation_name,omitempty"`
}
07070100000056000081A400000000000000000000000167FBDA0500000198000000000000000000000000000000000000007000000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_key_pairs_create_data_secret_info.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreKeyPairsCreateDataSecretInfo struct {
TypeOfSecret string `json:"type_of_secret,omitempty"`
CertName string `json:"cert_name,omitempty"`
KeyName string `json:"key_name,omitempty"`
}
07070100000057000081A400000000000000000000000167FBDA050000021C000000000000000000000000000000000000005D00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_key_pairs_keys.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreKeyPairsKeys struct {
Name string `json:"name,omitempty"`
TlsSecretName string `json:"tls_secret_name,omitempty"`
ImportIntoKs string `json:"import_into_ks,omitempty"`
ReplaceIfExists bool `json:"replace_if_exists,omitempty"`
CreateData *OpenUnisonSpecKeyStoreKeyPairsCreateData `json:"create_data,omitempty"`
}
07070100000058000081A400000000000000000000000167FBDA0500000144000000000000000000000000000000000000005A00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_static_keys.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreStaticKeys struct {
Name string `json:"name,omitempty"`
Version int32 `json:"version,omitempty"`
}
07070100000059000081A400000000000000000000000167FBDA050000014F000000000000000000000000000000000000006300000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_trusted_certificates.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreTrustedCertificates struct {
Name string `json:"name,omitempty"`
PemData string `json:"pem_data,omitempty"`
}
0707010000005A000081A400000000000000000000000167FBDA0500000185000000000000000000000000000000000000006000000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_key_store_update_controller.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecKeyStoreUpdateController struct {
Image string `json:"image,omitempty"`
Schedule string `json:"schedule,omitempty"`
DaysToExpire int32 `json:"days_to_expire,omitempty"`
}
0707010000005B000081A400000000000000000000000167FBDA050000022C000000000000000000000000000000000000004C00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_mapping.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecMapping struct {
EntityId string `json:"entity_id,omitempty"`
PostUrl string `json:"post_url,omitempty"`
RedirectUrl string `json:"redirect_url,omitempty"`
LogoutUrl string `json:"logout_url,omitempty"`
SigningCertAlias string `json:"signing_cert_alias,omitempty"`
EncryptionCertAlias string `json:"encryption_cert_alias,omitempty"`
}
0707010000005C000081A400000000000000000000000167FBDA050000016B000000000000000000000000000000000000004A00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_names.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecNames struct {
Name string `json:"name,omitempty"`
ServiceName string `json:"service_name,omitempty"`
EnvVar string `json:"env_var,omitempty"`
}
0707010000005D000081A400000000000000000000000167FBDA050000015A000000000000000000000000000000000000004E00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_openshift.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecOpenshift struct {
Git *OpenUnisonSpecOpenshiftGit `json:"git,omitempty"`
BuilderImage string `json:"builder_image,omitempty"`
}
0707010000005E000081A400000000000000000000000167FBDA0500000160000000000000000000000000000000000000005200000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_openshift_git.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecOpenshiftGit struct {
Repo string `json:"repo,omitempty"`
Branch string `json:"branch,omitempty"`
Dir string `json:"dir,omitempty"`
}
0707010000005F000081A400000000000000000000000167FBDA05000006F9000000000000000000000000000000000000006500000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_openunison_network_configuration.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecOpenunisonNetworkConfiguration struct {
ForceToLowerCase bool `json:"force_to_lower_case,omitempty"`
OpenPort int32 `json:"open_port,omitempty"`
OpenExternalPort int32 `json:"open_external_port,omitempty"`
SecurePort int32 `json:"secure_port,omitempty"`
SecureExternalPort int32 `json:"secure_external_port,omitempty"`
LdapPort int32 `json:"ldap_port,omitempty"`
LdapsPort int32 `json:"ldaps_port,omitempty"`
LdapsKeyName string `json:"ldaps_key_name,omitempty"`
ForceToSecure bool `json:"force_to_secure,omitempty"`
ActivemqDir string `json:"activemq_dir,omitempty"`
ClientAuth string `json:"client_auth,omitempty"`
AllowedClientNames []string `json:"allowed_client_names,omitempty"`
Ciphers []string `json:"ciphers,omitempty"`
PathToDeployment string `json:"path_to_deployment,omitempty"`
PathToEnvFile string `json:"path_to_env_file,omitempty"`
SecureKeyAlias string `json:"secure_key_alias,omitempty"`
AllowedTlsProtocols []string `json:"allowed_tls_protocols,omitempty"`
QuartzDir string `json:"quartz_dir,omitempty"`
ContextRoot string `json:"context_root,omitempty"`
DisableHttp2 bool `json:"disable_http2,omitempty"`
AllowUnEscapedChars string `json:"allow_un_escaped_chars,omitempty"`
WelecomePages []string `json:"welecome_pages,omitempty"`
ErrorPages []OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages `json:"error_pages,omitempty"`
RedirectToContextRoot bool `json:"redirect_to_context_root,omitempty"`
QueueConfiguration *OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration `json:"queue_configuration,omitempty"`
}
07070100000060000081A400000000000000000000000167FBDA050000015C000000000000000000000000000000000000007100000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_openunison_network_configuration_error_pages.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecOpenunisonNetworkConfigurationErrorPages struct {
Code int32 `json:"code,omitempty"`
Location string `json:"location,omitempty"`
}
07070100000061000081A400000000000000000000000167FBDA050000040B000000000000000000000000000000000000007900000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_openunison_network_configuration_queue_configuration.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfiguration struct {
UseInternalQueue bool `json:"use_internal_queue,omitempty"`
MaxProducers int32 `json:"max_producers,omitempty"`
ConnectionFactory string `json:"connection_factory,omitempty"`
MaxConsumers int32 `json:"max_consumers,omitempty"`
MaxSessionsPerConnection int32 `json:"max_sessions_per_connection,omitempty"`
TaskQueueName string `json:"task_queue_name,omitempty"`
SmtpQueueName string `json:"smtp_queue_name,omitempty"`
EncryptionKeyName string `json:"encryption_key_name,omitempty"`
NumQueues int32 `json:"num_queues,omitempty"`
MultiTaskQueues bool `json:"multi_task_queues,omitempty"`
KeepAliveMillis int32 `json:"keep_alive_millis,omitempty"`
Params []OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams `json:"params,omitempty"`
}
07070100000062000081A400000000000000000000000167FBDA0500000197000000000000000000000000000000000000008000000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_openunison_network_configuration_queue_configuration_params.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecOpenunisonNetworkConfigurationQueueConfigurationParams struct {
Name string `json:"name,omitempty"`
SourceType string `json:"source_type,omitempty"`
Value string `json:"value,omitempty"`
}
07070100000063000081A400000000000000000000000167FBDA0500000163000000000000000000000000000000000000005400000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_saml_remote_idp.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecSamlRemoteIdp struct {
Source *OpenUnisonSpecSource `json:"source,omitempty"`
Mapping *OpenUnisonSpecMapping `json:"mapping,omitempty"`
}
07070100000064000081A400000000000000000000000167FBDA050000012F000000000000000000000000000000000000004B00000000openunison-control-0.0.13/openunisonmodel/model_open_unison_spec_source.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonSpecSource struct {
Url string `json:"url,omitempty"`
Xml string `json:"xml,omitempty"`
}
07070100000065000081A400000000000000000000000167FBDA0500000227000000000000000000000000000000000000004600000000openunison-control-0.0.13/openunisonmodel/model_open_unison_status.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type Model struct{}
type ModelMap map[string]Model
type OpenUnisonStatus struct {
Conditions *OpenUnisonStatusConditions `json:"conditions,omitempty"`
Digest string `json:"digest,omitempty"`
IdpCertificateFingerprints ModelMap `json:"idpCertificateFingerprints,omitempty"`
}
07070100000066000081A400000000000000000000000167FBDA050000017F000000000000000000000000000000000000005100000000openunison-control-0.0.13/openunisonmodel/model_open_unison_status_conditions.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
type OpenUnisonStatusConditions struct {
LastTransitionTime string `json:"lastTransitionTime,omitempty"`
Status string `json:"status,omitempty"`
Type_ string `json:"type,omitempty"`
}
07070100000067000081A400000000000000000000000167FBDA05000004B7000000000000000000000000000000000000003600000000openunison-control-0.0.13/openunisonmodel/response.go/*
* OpenUnison CRD
*
* OpenUnison ScaleJS Register API
*
* API version: v6
* Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
*/
package openunisonmodel
import (
"net/http"
)
type APIResponse struct {
*http.Response `json:"-"`
Message string `json:"message,omitempty"`
// Operation is the name of the swagger operation.
Operation string `json:"operation,omitempty"`
// RequestURL is the request URL. This value is always available, even if the
// embedded *http.Response is nil.
RequestURL string `json:"url,omitempty"`
// Method is the HTTP method used for the request. This value is always
// available, even if the embedded *http.Response is nil.
Method string `json:"method,omitempty"`
// Payload holds the contents of the response body (which may be nil or empty).
// This is provided here as the raw response.Body() reader will have already
// been drained.
Payload []byte `json:"-"`
}
func NewAPIResponse(r *http.Response) *APIResponse {
response := &APIResponse{Response: r}
return response
}
func NewAPIResponseWithError(errorMessage string) *APIResponse {
response := &APIResponse{Message: errorMessage}
return response
}
07070100000068000081ED00000000000000000000000167FBDA0500000637000000000000000000000000000000000000002500000000openunison-control-0.0.13/ouctl.yamlapiVersion: krew.googlecontainertools.github.com/v1alpha2
kind: Plugin
metadata:
name: ouctl
spec:
version: "v_VERSION_"
homepage: https://github.com/tremolosecurity/openunison-control
shortDescription: "Deploy OpenUnison for authentication and automation"
description: Deploys OpenUnison, see https://openunison.github.io/deployauth/ for details
platforms:
- selector:
matchLabels:
os: darwin
arch: amd64
uri: https://nexus.tremolo.io/repository/_REPO_/ouctl-_VERSION_-macos.zip
sha256: _MAC_SHA_
files:
- from: "ouctl"
to: "ouctl"
- from: "LICENSE"
to: "LICENSE"
bin: ouctl
- selector:
matchLabels:
os: darwin
arch: arm64
uri: https://nexus.tremolo.io/repository/_REPO_/ouctl-_VERSION_-macos-arm64.zip
sha256: _MAC_ARM64_SHA_
files:
- from: "ouctl"
to: "ouctl"
- from: "LICENSE"
to: "LICENSE"
bin: ouctl
- selector:
matchExpressions:
- key: "os"
operator: "In"
values:
- linux
uri: https://nexus.tremolo.io/repository/_REPO_/ouctl-_VERSION_-linux.zip
sha256: _LINUX_SHA_
files:
- from: "ouctl"
to: "ouctl"
- from: "LICENSE"
to: "LICENSE"
bin: ouctl
- selector:
matchExpressions:
- key: "os"
operator: "In"
values:
- windows
uri: https://nexus.tremolo.io/repository/_REPO_/ouctl-_VERSION_-win.zip
sha256: _WIN_SHA_
files:
- from: "ouctl.exe"
to: "ouctl.exe"
- from: "LICENSE"
to: "LICENSE"
bin: ouctl.exe07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!470 blocks