Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.6%) to scientific vocabulary
Repository
Bridge operator repo
Basic Info
- Host: GitHub
- Owner: IBM
- License: apache-2.0
- Language: Go
- Default Branch: main
- Size: 110 MB
Statistics
- Stars: 21
- Watchers: 6
- Forks: 5
- Open Issues: 6
- Releases: 0
Metadata Files
README.md
Bridge Operator
The Kubernetes Bridge operator is able to submit and monitor long running processes on external systems which have their own cluster/resource manager, including SLURM, LSF and Ray. The implementation is agnostic to the choice of resource manager but assumes the system exposes a HTTP/HTTPS API for its control and management.
This operator can be deployed to submit traditional HPC cluster jobs but also to submit jobs to external systems such as: AI accelerators on dedicated clusters, heterogeneous HPC platforms, or Quantum systems.
We provide specific example Pod images for
LSF: aPodmanaging jobs inside an IBM Spectrum LSF ClusterQuantum: aPodmanaging jobs inside the IBM Quantum ServiceSLURM: aPodmanaging jobs inside a Slurm clusterRay: aPodmanaging jobs inside a Ray cluster
Overview
The Bridge Operator acts as a simple bridge between Kubernetes and the external system where visibility into the external system is limited to the system's HTTP(S) API requests. As a result there is no interaction between the Kubernetes scheduler and the workload manager on the external system.
The operator consists of a Kubernetes controller with Custom Resource Definitions (CRDs), a Pod and ConfigMap.
Once the CR is deployed, the operator is responsible for:
- Validating input parameters - checking if
secrets and other necessary Kubernetes resources specified in the CR exist. - Creating the ConfigMap with application specific data from the CR Spec. The data is later utilized by the Pod when submitting the job.
- Creating the Pod that submits the HTTP/HTTPS requests to send the job to the external system.
- Reading the job's current state from the ConfigMap (updated by the Pod) and updating the CR status accordingly.
- Monitoring the Pod and other Kubernetes resources.
- Responding to reported errors in the external system.
- Cleaning up resources when the job is deleted.

Prerequisites
The operator implementation depends on the Operator SDK which should be installed on your machine. Installation prerequisites are here and include:
- git
- go version 1.18
- docker version 17.03+
- kubectl and access to a Kubernetes cluster of a compatible version. Installation procedures are described here For Mac users, we recommend installing with brew. Tested with version v1.22.2
Operator Implementation Details
The Operator's implementation presents a general way of managing Kubernetes resources to create a bridge between an external system and Kubernetes.
The code crucial to submitting and monitoring any actual jobs on the external system is located inside the Pod's image.
A specific example image for a Pod managing jobs inside the IBM Spectrum LSF workload management package;
is given in lsf-pod.
The Operator defines a CRD BridgeJob which gathers information (required and optional) about the external job.
The operator's logic is implemented in the controller's reconcile() function and is used to create, and subsequently control,
the ConfigMap and the Pod. Both of which are created directly by the operator.
Additionally the operator leverages the following:
- A
Secretwith credentials needed to access the external system from thePod. Assuming the external system requires authentication, the credentials are expected to exist in advance. - An optional
Secretwith credentials needed to access an S3 object storage bucket used to store input or output files.
Custom Resource Definiton BridgeJob
Here is a general overview of the CRD YAML with some defaults filled in. All fields can hold custom values.
yaml
kind: BridgeJob
apiVersion: bridgejob.ibm.com/v1alpha1
metadata:
name: mybridgejob
spec:
resourceURL: http://mycluster.ibm.com:8080/platform/
resourcesecret: mysecret
imagepullpolicy: Always
updateinterval: 30
jobproperties:
runlimit: 20 # mins
jobdata:
jobScript: /home/batch.sh
scriptlocation: remote
s3storage:
s3secret: mysecret-s3
endpoint: minio-endpoint.us-south.containers.appdomain.cloud
secure: false
s3upload:
bucket: mybucket
files: 'output.txt'
CRD Status
| Field | Short description |
| ----------------------- | :--------------------------------------------------------------------------- |
| status.jobstatus | Status of CR, should reflect status of job in external system |
| status.message | Message providing additional information for DONE/KILLED/FAILED/UNKNOWN jobs |
| status.starttime | Start time from external system filled when job is in finished state |
| status.completiontime | Completion time from external system filled when job is in finished state |
spec.jobproperties is a map struct of common job properties which can be selected for the job in external system.
Possible job statuses :
PENDINGRUNNINGSUSPENDEDDONEFAILEDKILLEDUNKNOWN
BridgeJob is in a finished state when thejobstatus is in one of the DONE, KILLED, FAILED, or UNKNOWN states.
When BridgeJob fails because of missing Kuberentes resources (or data in them), status.message is filled with a brief explanation.
Reconciler
The controller's reconcile logic can be compared to a finite state machine, where every BridgeJob CR specifies a state and
actions specific to that state are performed. The possible states can be grouped into two categories as follows:
- finished: the job's state in the
ConfigMapupdated by the Pod isFailed', 'Done', 'Killed', or 'Unknown - running: the job's state in the
ConfigMapupdated by the Pod isPending', 'Running', or 'Suspended
At the beginning of reconciliation, the controller checks if BridgeJob is in a finished or running state. At the end of reconciliation,
BridgeJob's state is updated according to the state in the shared ConfigMap.
Notes on S3
If the S3 secret name is not specified in BridgeJob yaml, no information regarding S3 will be propagated to the shared ConfigMap.
If the S3 secret name is specified but it does not exist in the BridgeJob namespace or information is missing
(either in Secret or in BridgeJob such as the S3 endpoint), then the CR will fail.
The Pod performs other checks, such as checking for valid credentials, bucket existence.
Local Installation and Deployment
- Clone this repository
git clone https://github.com/IBM/Bridge-Operator.git cd operator- To run:
a) Locally outside the cluster
- Locally from binaries
- Deploy the CRD:
kubectl apply -f config/crd/bases/bridgejob.ibm.com_bridgejobs.yaml - Edit the file
main.go, for theflag.BoolVaras follows: (that is changetruetofalse)
golang
flag.BoolVar(&enableLeaderElection, "leader-elect", false,
"Enable leader election for controller manager. "+
"Enabling this will ensure there is only one active controller manager.")
- Then run the follwing command:
make install run
b) Run as a Deployment inside cluster
- Deploy the CRD:
kubectl apply -f config/crd/bases/bridgejob.ibm.com_bridgejobs.yaml make deploy- From pre-built resources
- Deploy all resources at once:
kubectl apply -f all.yaml
NOTE: for running on a local Kind cluster comment out all lines in operator/config/prometheus/monitor.yaml before deploying the operator.
Examples
For valid examples of Secrets, see lsfsecret.yaml and s3secret.yaml in samples/core/secrets.
For CR examples, see samples/core/operator and for tutorials see samples/tutorials.
Build and Run
Before building, make sure kustomize is installed.
Clone this repository git clone https://github.com/IBM/Bridge-Operator.git. Then run the following commands:
shell
cd operator
cd config/manager
kustomize edit set image controller=${IMG}:[NEW_VERSION]
cd ../../ # Back to the repo root directory
make docker-build docker-push IMG=${IMG}:[NEW_VERSION]
make deploy IMG=${IMG}:[VERSION] # Deploys controller to K8s cluster specified in ~/.kube/config
kustomize build config/default > all.yaml # Generates all resources that have been deployed
Owner
- Name: International Business Machines
- Login: IBM
- Kind: organization
- Email: awesome@ibm.com
- Location: United States of America
- Website: https://www.ibm.com/opensource/
- Twitter: ibmdeveloper
- Repositories: 3,152
- Profile: https://github.com/IBM
Citation (CITATION.cff)
cff-version: 1.0.0
message: "If you use the Bridge operator, please consider citing as below."
authors:
- family-names: Lublinsky, Jennings, Spišaková
given-names: Boris, Elise, Victoria
title: "A Kubernetes 'Bridge' operator between cloud and external resources"
version: 0.0.1
url: "https://github.com/Accelerated-Discovery/bridge-operator"
doi: https://arxiv.org/abs/2207.02531
date-released: 2022-10-26
GitHub Events
Total
- Watch event: 2
- Pull request event: 1
- Create event: 1
Last Year
- Watch event: 2
- Pull request event: 1
- Create event: 1
Dependencies
- gcr.io/distroless/static nonroot build
- golang 1.18 build
- registry.access.redhat.com/ubi8/python-38 1-100 build
- cloud.google.com/go v0.81.0
- github.com/Azure/go-autorest v14.2.0+incompatible
- github.com/Azure/go-autorest/autorest v0.11.18
- github.com/Azure/go-autorest/autorest/adal v0.9.13
- github.com/Azure/go-autorest/autorest/date v0.3.0
- github.com/Azure/go-autorest/logger v0.2.1
- github.com/Azure/go-autorest/tracing v0.6.0
- github.com/PuerkitoBio/purell v1.1.1
- github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
- github.com/beorn7/perks v1.0.1
- github.com/cespare/xxhash/v2 v2.1.2
- github.com/davecgh/go-spew v1.1.1
- github.com/emicklei/go-restful v2.9.5+incompatible
- github.com/evanphx/json-patch v4.12.0+incompatible
- github.com/form3tech-oss/jwt-go v3.2.3+incompatible
- github.com/fsnotify/fsnotify v1.5.1
- github.com/go-logr/logr v1.2.0
- github.com/go-logr/zapr v1.2.0
- github.com/go-openapi/jsonpointer v0.19.5
- github.com/go-openapi/jsonreference v0.19.5
- github.com/go-openapi/swag v0.19.14
- github.com/gogo/protobuf v1.3.2
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
- github.com/golang/protobuf v1.5.2
- github.com/google/gnostic v0.5.7-v3refs
- github.com/google/go-cmp v0.5.5
- github.com/google/gofuzz v1.1.0
- github.com/google/uuid v1.1.2
- github.com/imdario/mergo v0.3.12
- github.com/josharian/intern v1.0.0
- github.com/json-iterator/go v1.1.12
- github.com/mailru/easyjson v0.7.6
- github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- github.com/modern-go/reflect2 v1.0.2
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
- github.com/nxadm/tail v1.4.8
- github.com/onsi/ginkgo v1.16.5
- github.com/onsi/gomega v1.18.1
- github.com/pkg/errors v0.9.1
- github.com/prometheus/client_golang v1.12.1
- github.com/prometheus/client_model v0.2.0
- github.com/prometheus/common v0.32.1
- github.com/prometheus/procfs v0.7.3
- github.com/spf13/pflag v1.0.5
- go.uber.org/atomic v1.7.0
- go.uber.org/multierr v1.6.0
- go.uber.org/zap v1.19.1
- golang.org/x/crypto v0.0.0-20220214200702-86341886e292
- golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd
- golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
- golang.org/x/sys v0.0.0-20220209214540-3681064d5158
- golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
- golang.org/x/text v0.3.7
- golang.org/x/time v0.0.0-20220210224613-90d013bbcef8
- gomodules.xyz/jsonpatch/v2 v2.2.0
- google.golang.org/appengine v1.6.7
- google.golang.org/protobuf v1.27.1
- gopkg.in/inf.v0 v0.9.1
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
- gopkg.in/yaml.v2 v2.4.0
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
- k8s.io/api v0.24.0
- k8s.io/apiextensions-apiserver v0.24.0
- k8s.io/apimachinery v0.24.0
- k8s.io/client-go v0.24.0
- k8s.io/component-base v0.24.0
- k8s.io/klog v1.0.0
- k8s.io/klog/v2 v2.60.1
- k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
- k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
- sigs.k8s.io/controller-runtime v0.12.1
- sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
- sigs.k8s.io/structured-merge-diff/v4 v4.2.1
- sigs.k8s.io/yaml v1.3.0
- 893 dependencies
- github.com/PuerkitoBio/purell v1.1.1
- github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
- github.com/clbanning/mxj/v2 v2.5.6
- github.com/davecgh/go-spew v1.1.1
- github.com/dustin/go-humanize v1.0.0
- github.com/emicklei/go-restful v2.9.5+incompatible
- github.com/go-logr/logr v1.2.0
- github.com/go-openapi/jsonpointer v0.19.5
- github.com/go-openapi/jsonreference v0.19.5
- github.com/go-openapi/swag v0.19.14
- github.com/gogo/protobuf v1.3.2
- github.com/golang/protobuf v1.5.2
- github.com/google/gnostic v0.5.7-v3refs
- github.com/google/gofuzz v1.1.0
- github.com/google/uuid v1.3.0
- github.com/ibm/bridge-operator/podutils v0.0.1
- github.com/josharian/intern v1.0.0
- github.com/json-iterator/go v1.1.12
- github.com/klauspost/compress v1.15.9
- github.com/klauspost/cpuid/v2 v2.1.0
- github.com/mailru/easyjson v0.7.6
- github.com/minio/md5-simd v1.1.2
- github.com/minio/minio-go/v7 v7.0.34
- github.com/minio/sha256-simd v1.0.0
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- github.com/modern-go/reflect2 v1.0.2
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
- github.com/rs/xid v1.4.0
- github.com/sirupsen/logrus v1.9.0
- golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
- golang.org/x/net v0.0.0-20220722155237-a158d28d115b
- golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
- golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
- golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
- golang.org/x/text v0.3.7
- golang.org/x/time v0.0.0-20220210224613-90d013bbcef8
- google.golang.org/appengine v1.6.7
- google.golang.org/protobuf v1.27.1
- gopkg.in/inf.v0 v0.9.1
- gopkg.in/ini.v1 v1.66.6
- gopkg.in/yaml.v2 v2.4.0
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
- k8s.io/api v0.24.3
- k8s.io/apimachinery v0.24.3
- k8s.io/client-go v0.24.3
- k8s.io/klog v1.0.0
- k8s.io/klog/v2 v2.60.1
- k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
- k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
- sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
- sigs.k8s.io/structured-merge-diff/v4 v4.2.1
- sigs.k8s.io/yaml v1.2.0
- 603 dependencies
- github.com/PuerkitoBio/purell v1.1.1
- github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
- github.com/davecgh/go-spew v1.1.1
- github.com/dustin/go-humanize v1.0.0
- github.com/emicklei/go-restful v2.9.5+incompatible
- github.com/go-logr/logr v1.2.0
- github.com/go-openapi/jsonpointer v0.19.5
- github.com/go-openapi/jsonreference v0.19.5
- github.com/go-openapi/swag v0.19.14
- github.com/gogo/protobuf v1.3.2
- github.com/golang/protobuf v1.5.2
- github.com/google/gnostic v0.5.7-v3refs
- github.com/google/gofuzz v1.1.0
- github.com/google/uuid v1.3.0
- github.com/ibm/bridge-operator/podutils v0.0.1
- github.com/josharian/intern v1.0.0
- github.com/json-iterator/go v1.1.12
- github.com/klauspost/compress v1.15.9
- github.com/klauspost/cpuid/v2 v2.1.0
- github.com/mailru/easyjson v0.7.6
- github.com/minio/md5-simd v1.1.2
- github.com/minio/minio-go/v7 v7.0.34
- github.com/minio/sha256-simd v1.0.0
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- github.com/modern-go/reflect2 v1.0.2
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
- github.com/rs/xid v1.4.0
- github.com/sirupsen/logrus v1.9.0
- golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
- golang.org/x/net v0.0.0-20220722155237-a158d28d115b
- golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
- golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
- golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
- golang.org/x/text v0.3.7
- golang.org/x/time v0.0.0-20220210224613-90d013bbcef8
- google.golang.org/appengine v1.6.7
- google.golang.org/protobuf v1.27.1
- gopkg.in/inf.v0 v0.9.1
- gopkg.in/ini.v1 v1.66.6
- gopkg.in/yaml.v2 v2.4.0
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
- k8s.io/api v0.24.3
- k8s.io/apimachinery v0.24.3
- k8s.io/client-go v0.24.3
- k8s.io/klog v1.0.0
- k8s.io/klog/v2 v2.60.1
- k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
- k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
- sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
- sigs.k8s.io/structured-merge-diff/v4 v4.2.1
- sigs.k8s.io/yaml v1.2.0
- 603 dependencies
- github.com/PuerkitoBio/purell v1.1.1
- github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
- github.com/davecgh/go-spew v1.1.1
- github.com/dustin/go-humanize v1.0.0
- github.com/emicklei/go-restful v2.9.5+incompatible
- github.com/go-logr/logr v1.2.0
- github.com/go-openapi/jsonpointer v0.19.5
- github.com/go-openapi/jsonreference v0.19.5
- github.com/go-openapi/swag v0.19.14
- github.com/gogo/protobuf v1.3.2
- github.com/golang/protobuf v1.5.2
- github.com/google/gnostic v0.5.7-v3refs
- github.com/google/gofuzz v1.1.0
- github.com/google/uuid v1.3.0
- github.com/ibm/bridge-operator/podutils v0.0.1
- github.com/josharian/intern v1.0.0
- github.com/json-iterator/go v1.1.12
- github.com/klauspost/compress v1.15.9
- github.com/klauspost/cpuid/v2 v2.1.0
- github.com/mailru/easyjson v0.7.6
- github.com/minio/md5-simd v1.1.2
- github.com/minio/minio-go/v7 v7.0.34
- github.com/minio/sha256-simd v1.0.0
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- github.com/modern-go/reflect2 v1.0.2
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
- github.com/rs/xid v1.4.0
- github.com/sirupsen/logrus v1.9.0
- golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
- golang.org/x/net v0.0.0-20220722155237-a158d28d115b
- golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
- golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
- golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
- golang.org/x/text v0.3.7
- golang.org/x/time v0.0.0-20220210224613-90d013bbcef8
- google.golang.org/appengine v1.6.7
- google.golang.org/protobuf v1.27.1
- gopkg.in/inf.v0 v0.9.1
- gopkg.in/ini.v1 v1.66.6
- gopkg.in/yaml.v2 v2.4.0
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
- k8s.io/api v0.24.3
- k8s.io/apimachinery v0.24.3
- k8s.io/client-go v0.24.3
- k8s.io/klog v1.0.0
- k8s.io/klog/v2 v2.60.1
- k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
- k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
- sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
- sigs.k8s.io/structured-merge-diff/v4 v4.2.1
- sigs.k8s.io/yaml v1.2.0
- 602 dependencies
- github.com/PuerkitoBio/purell v1.1.1
- github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
- github.com/davecgh/go-spew v1.1.1
- github.com/dustin/go-humanize v1.0.0
- github.com/emicklei/go-restful v2.9.5+incompatible
- github.com/go-logr/logr v1.2.0
- github.com/go-openapi/jsonpointer v0.19.5
- github.com/go-openapi/jsonreference v0.19.5
- github.com/go-openapi/swag v0.19.14
- github.com/gogo/protobuf v1.3.2
- github.com/golang/protobuf v1.5.2
- github.com/google/gnostic v0.5.7-v3refs
- github.com/google/gofuzz v1.1.0
- github.com/google/uuid v1.3.0
- github.com/josharian/intern v1.0.0
- github.com/json-iterator/go v1.1.12
- github.com/klauspost/compress v1.15.9
- github.com/klauspost/cpuid/v2 v2.1.0
- github.com/mailru/easyjson v0.7.6
- github.com/minio/md5-simd v1.1.2
- github.com/minio/minio-go/v7 v7.0.34
- github.com/minio/sha256-simd v1.0.0
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
- github.com/modern-go/reflect2 v1.0.2
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
- github.com/rs/xid v1.4.0
- github.com/sirupsen/logrus v1.9.0
- golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
- golang.org/x/net v0.0.0-20220722155237-a158d28d115b
- golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
- golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
- golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
- golang.org/x/text v0.3.7
- golang.org/x/time v0.0.0-20220210224613-90d013bbcef8
- google.golang.org/appengine v1.6.7
- google.golang.org/protobuf v1.27.1
- gopkg.in/inf.v0 v0.9.1
- gopkg.in/ini.v1 v1.66.6
- gopkg.in/yaml.v2 v2.4.0
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
- k8s.io/api v0.24.3
- k8s.io/apimachinery v0.24.3
- k8s.io/client-go v0.24.3
- k8s.io/klog v1.0.0
- k8s.io/klog/v2 v2.60.1
- k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
- k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
- sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
- sigs.k8s.io/structured-merge-diff/v4 v4.2.1
- sigs.k8s.io/yaml v1.2.0
- 602 dependencies